package main_test /* TODO(toby3d): provide testdata import ( "context" "io" "net" "net/http" "strings" "testing" "time" home "source.toby3d.me/toby3d/home" "source.toby3d.me/toby3d/home/internal/common" "source.toby3d.me/toby3d/home/internal/domain" ) func TestApp(t *testing.T) { t.Parallel() ln, err := net.Listen("tcp", "0.0.0.0:0") if err != nil { t.Fatal(err) } t.Cleanup(func() { _ = ln.Close() }) addr, _ := ln.Addr().(*net.TCPAddr) t.Logf("running testing app on %s port", addr) testConfig := domain.TestConfig(t) testConfig.Host = addr.IP.String() testConfig.Port = uint16(addr.Port) ctx := context.Background() app, err := home.NewApp(ctx, testConfig) if err != nil { t.Fatal(err) } go app.Run(ln) t.Cleanup(func() { _ = app.Stop(ctx) }) for name, tc := range map[string]struct { AcceptLanguage string }{ "personal": {AcceptLanguage: "ru,en;q=0.7,eo;q=0.3"}, "mastodon-long": {AcceptLanguage: "en-GB,en-US;q=0.9,en;q=0.8,ru;q=0.7"}, "mastodon-short": {AcceptLanguage: "en-US,en;q=0.5"}, } { name, tc := name, tc t.Run(name, func(t *testing.T) { t.Parallel() req, err := http.NewRequest(http.MethodGet, "http://"+testConfig.AddrPort().String()+"/", nil) if err != nil { t.Fatal(err) } req.Header.Set(common.HeaderAcceptLanguage, tc.AcceptLanguage) client := http.Client{Timeout: 1 * time.Second} resp, err := client.Do(req) if err != nil { t.Fatal("cannot make request:", err) } body, err := io.ReadAll(resp.Body) if err != nil { t.Fatal(err) } if content := string(body); strings.Contains(content, "invalid argument") { t.Errorf("response body contains error:\n%s", content) } }) } } */