From 6ed6988602811b9af5d524151721fd7db90834ef Mon Sep 17 00:00:00 2001 From: Evgeny Kuznetsov Date: Tue, 28 Jan 2020 14:23:18 +0300 Subject: mock server for testing --- main.go | 37 ++++++++++++----- main_test.go | 67 ++++++++++++++++++++++++++++-- testdata/TestServedFeed.golden | 92 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 181 insertions(+), 15 deletions(-) create mode 100644 testdata/TestServedFeed.golden diff --git a/main.go b/main.go index 22846b0..f29fae3 100644 --- a/main.go +++ b/main.go @@ -52,6 +52,8 @@ var ( episodeUrlRe = regexp.MustCompile(` 1 { - return fmt.Errorf("bad episode") + return errBadEpisode } episodeUrl := "http://www.radiorus.ru/brand/" + string(episodeUrlRe.FindSubmatch(episode)[1]) episodeTitle := string(episodeTitleRe.FindSubmatch(episode)[1]) diff --git a/main_test.go b/main_test.go index 4a5e53f..819f9d0 100644 --- a/main_test.go +++ b/main_test.go @@ -18,14 +18,24 @@ package main import ( "bytes" "flag" + "fmt" "io/ioutil" + "net/http" + "net/http/httptest" + "os" "path/filepath" + "sync" "testing" "github.com/gorilla/feeds" ) -var update = flag.Bool("update", false, "update .golden files") +var ( + update = flag.Bool("update", false, "update .golden files") + fakeURL = `**localhost**` +) + +const pth = "testdata/brand/57083" func helperLoadBytes(t *testing.T, name string) []byte { t.Helper() @@ -56,9 +66,30 @@ func TestFeed(t *testing.T) { actual := createFeed(feed) golden := filepath.Join("testdata", t.Name()+".golden") if *update { - if err := ioutil.WriteFile(golden, actual, 0644); err != nil { - t.Fatal(err) - } + writeFile(actual, golden) + } + expected, _ := ioutil.ReadFile(golden) + + if !bytes.Equal(actual, expected) { + t.Fail() + } +} + +func TestServedFeed(t *testing.T) { + server := helperMockServer(t) + defer helperCleanupServer(t) + + feed := getFeed(fmt.Sprintf("%s/brand/57083/episodes", server.URL)) + + var wg sync.WaitGroup + wg.Add(1) + describeFeed(feed, &wg) + wg.Wait() + + actual := bytes.ReplaceAll(createFeed(feed), []byte(server.URL), []byte(fakeURL)) + golden := filepath.Join("testdata", t.Name()+".golden") + if *update { + writeFile(actual, golden) } expected, _ := ioutil.ReadFile(golden) @@ -66,3 +97,31 @@ func TestFeed(t *testing.T) { t.Fail() } } + +func helperMockServer(t *testing.T) *httptest.Server { + t.Helper() + + fileserver := http.FileServer(http.Dir("testdata")) + server := httptest.NewServer(fileserver) + + episodes := helperLoadBytes(t, "episodes") + writeFile(episodes, filepath.Join(pth, "episodes")) + + about := helperLoadBytes(t, "about") + writeFile(about, filepath.Join(pth, "about")) + + return server +} + +func helperCleanupServer(t *testing.T) { + t.Helper() + helperCleanupFile(t, "episodes") + helperCleanupFile(t, "about") +} + +func helperCleanupFile(t *testing.T, name string) { + t.Helper() + if err := os.Remove(filepath.Join(pth, name)); err != nil { + t.Fatal(err) + } +} diff --git a/testdata/TestServedFeed.golden b/testdata/TestServedFeed.golden new file mode 100644 index 0000000..a2301fa --- /dev/null +++ b/testdata/TestServedFeed.golden @@ -0,0 +1,92 @@ + + + <a href="/brand/57083">"Аэростат"</a> + **localhost**/brand/57083/episodes + Вы не можете быть до конца уверены, что на этот раз вам откроет БГ – будь то взгляд на группу Doors или столь глобальные вопросы, как: что такое новое время, как делится история мира в соответствии с древней индийской космогонией, стоит ли ждать ветра перемен, ждет ли нас духовное возрождение, где граница между прошлым и будущим. А может и вовсе не стоит искать ответы на эти вопросы? Потому что это не те вопросы, а потому и ответы не приведут вас к истине... Прислушаемся к Борису Гребенщикову, который с улыбкой говорит всем нам "Здравствуйте!" и находит самые простые ответы... + + https://cdn-st4.rtr-vesti.ru/vh/pictures/xw/124/617/1.jpg + "Аэростат" + **localhost**/brand/57083/episodes + + + Новые имена 27 + http://www.radiorus.ru/brand/57083/episode/2237849 + + + http://www.radiorus.ru/brand/57083/episode/2237849 + Sun, 26 Jan 2020 14:10:00 +0300 + + + The Cure + http://www.radiorus.ru/brand/57083/episode/2237781 + + + http://www.radiorus.ru/brand/57083/episode/2237781 + Sun, 19 Jan 2020 14:10:00 +0300 + + + Новые песни января + http://www.radiorus.ru/brand/57083/episode/2236152 + + + http://www.radiorus.ru/brand/57083/episode/2236152 + Sun, 12 Jan 2020 14:10:00 +0300 + + + Новогодние притчи + http://www.radiorus.ru/brand/57083/episode/2234173 + + + http://www.radiorus.ru/brand/57083/episode/2234173 + Sun, 05 Jan 2020 14:10:00 +0300 + + + С наступающим! + http://www.radiorus.ru/brand/57083/episode/2233216 + + + http://www.radiorus.ru/brand/57083/episode/2233216 + Sun, 29 Dec 2019 14:10:00 +0300 + + + Рождество + http://www.radiorus.ru/brand/57083/episode/2231513 + + + http://www.radiorus.ru/brand/57083/episode/2231513 + Sun, 22 Dec 2019 14:10:00 +0300 + + + "То да сё # 6" (Сила музыки) + http://www.radiorus.ru/brand/57083/episode/2229234 + + + http://www.radiorus.ru/brand/57083/episode/2229234 + Sun, 15 Dec 2019 14:10:00 +0300 + + + Новые песни декабря + http://www.radiorus.ru/brand/57083/episode/2226836 + + + http://www.radiorus.ru/brand/57083/episode/2226836 + Sun, 08 Dec 2019 14:10:00 +0300 + + + То да сё № 5 + http://www.radiorus.ru/brand/57083/episode/2223937 + + + http://www.radiorus.ru/brand/57083/episode/2223937 + Sun, 01 Dec 2019 14:10:00 +0300 + + + ELO: "Из ниоткуда" 2019 + http://www.radiorus.ru/brand/57083/episode/2222868 + + + http://www.radiorus.ru/brand/57083/episode/2222868 + Sun, 24 Nov 2019 14:10:00 +0300 + + + \ No newline at end of file -- cgit v1.2.3