func Test_CompositionHandler_PositiveCaseWithCache(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() a := assert.New(t) contentFetcherFactory := func(r *http.Request) FetchResultSupplier { return MockFetchResultSupplier{ &FetchResult{ Def: NewFetchDefinition("/foo"), Content: &MemoryContent{ body: map[string]Fragment{ "": StringFragment("Hello World\n"), }, }, Hash: "hashString", }, } } ch := NewCompositionHandlerWithCache(ContentFetcherFactory(contentFetcherFactory), cache.NewCache("my-cache", 100, 100, time.Millisecond)) resp := httptest.NewRecorder() r, _ := http.NewRequest("GET", "http://example.com", nil) ch.cache.Set("hashString", "", 1, nil) ch.ServeHTTP(resp, r) _, foundInCache := ch.cache.Get("hashString") a.True(foundInCache) }
func Test_CompositionHandler_ErrorInMergingWithCache(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() a := assert.New(t) contentFetcherFactory := func(r *http.Request) FetchResultSupplier { return MockFetchResultSupplier{ &FetchResult{ Def: NewFetchDefinition("/foo"), Content: &MemoryContent{}, Err: nil, Hash: "hashString", }, } } aggregator := NewCompositionHandlerWithCache(ContentFetcherFactory(contentFetcherFactory), cache.NewCache("my-cache", 100, 100, time.Millisecond)) aggregator.cache.Set("hashString", "", 1, nil) aggregator.contentMergerFactory = func(jsonData map[string]interface{}) ContentMerger { merger := NewMockContentMerger(ctrl) merger.EXPECT().AddContent(gomock.Any(), 0) merger.EXPECT().GetHtml().Return(nil, errors.New("an error")) return merger } resp := httptest.NewRecorder() r, _ := http.NewRequest("GET", "http://example.com", nil) aggregator.ServeHTTP(resp, r) _, foundInCache := aggregator.cache.Get("hashString") a.False(foundInCache) a.Equal("Internal Server Error: an error\n", string(resp.Body.Bytes())) a.Equal(500, resp.Code) }