Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(179)

Side by Side Diff: milo/frontend/main_test.go

Issue 2977863002: [milo] Refactor all html knowledge out of backends. (Closed)
Patch Set: now with case insensitivity Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « milo/frontend/main.go ('k') | milo/frontend/middleware.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The LUCI Authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 package frontend
16
17 import (
18 "flag"
19 "fmt"
20 "io/ioutil"
21 "net/http"
22 "net/url"
23 "path/filepath"
24 "regexp"
25 "strings"
26 "testing"
27 "time"
28
29 "golang.org/x/net/context"
30
31 "github.com/luci/gae/impl/memory"
32 "github.com/luci/luci-go/common/clock/testclock"
33 "github.com/luci/luci-go/milo/buildsource/swarming"
34 "github.com/luci/luci-go/milo/common"
35 "github.com/luci/luci-go/server/auth"
36 "github.com/luci/luci-go/server/auth/authtest"
37 "github.com/luci/luci-go/server/auth/identity"
38 "github.com/luci/luci-go/server/settings"
39 "github.com/luci/luci-go/server/templates"
40
41 . "github.com/smartystreets/goconvey/convey"
42 )
43
44 type testPackage struct {
45 Data func() []common.TestBundle
46 DisplayName string
47 TemplateName string
48 }
49
50 var (
51 allPackages = []testPackage{
52 {buildbotBuildTestData, "buildbot.build", "build.html"},
53 {buildbotBuilderTestData, "buildbot.builder", "builder.html"},
54 {func() []common.TestBundle {
55 return swarming.BuildTestData("../buildsource/swarming")
56 }, "swarming.build", "build.html"},
57 {swarming.LogTestData, "swarming.log", "log.html"},
58 {frontpageTestData, "frontpage", "frontpage.html"},
59 }
60 )
61
62 var generate = flag.Bool(
63 "test.generate", false, "Generate expectations instead of running tests. ")
64
65 func expectFileName(name string) string {
66 name = strings.Replace(name, " ", "_", -1)
67 name = strings.Replace(name, "/", "_", -1)
68 name = strings.Replace(name, ":", "-", -1)
69 return filepath.Join("expectations", name)
70 }
71
72 func load(name string) ([]byte, error) {
73 filename := expectFileName(name)
74 return ioutil.ReadFile(filename)
75 }
76
77 // mustWrite Writes a buffer into an expectation file. Should always work or
78 // panic. This is fine because this only runs when -generate is passed in,
79 // not during tests.
80 func mustWrite(name string, buf []byte) {
81 filename := expectFileName(name)
82 err := ioutil.WriteFile(filename, buf, 0644)
83 if err != nil {
84 panic(err)
85 }
86 }
87
88 type analyticsSettings struct {
89 AnalyticsID string `json:"analytics_id"`
90 }
91
92 func TestPages(t *testing.T) {
93 fixZeroDurationRE := regexp.MustCompile(`(Running for:|waiting) 0s?`)
94 fixZeroDuration := func(text string) string {
95 return fixZeroDurationRE.ReplaceAllLiteralString(text, "[ZERO DU RATION]")
96 }
97
98 Convey("Testing basic rendering.", t, func() {
99 c := context.Background()
100 c = memory.Use(c)
101 c = common.WithRequest(c, &http.Request{URL: &url.URL{Path: "/fo obar"}})
102 c, _ = testclock.UseTime(c, testclock.TestTimeUTC)
103 c = auth.WithState(c, &authtest.FakeState{Identity: identity.Ano nymousIdentity})
104 c = settings.Use(c, settings.New(&settings.MemoryStorage{Expirat ion: time.Second}))
105 err := settings.Set(c, "analytics", &analyticsSettings{"UA-12345 -01"}, "", "")
106 So(err, ShouldBeNil)
107 c = templates.Use(c, common.GetTemplateBundle("appengine/templat es"))
108 for _, p := range allPackages {
109 Convey(fmt.Sprintf("Testing handler %q", p.DisplayName), func() {
110 for _, b := range p.Data() {
111 Convey(fmt.Sprintf("Testing: %q", b.Desc ription), func() {
112 args := b.Data
113 // This is not a path, but a fil e key, should always be "/".
114 tmplName := "pages/" + p.Templat eName
115 buf, err := templates.Render(c, tmplName, args)
116 So(err, ShouldBeNil)
117 fname := fmt.Sprintf(
118 "%s-%s.html", p.DisplayN ame, b.Description)
119 if *generate {
120 mustWrite(fname, buf)
121 } else {
122 localBuf, err := load(fn ame)
123 So(err, ShouldBeNil)
124 So(fixZeroDuration(strin g(buf)), ShouldEqual, fixZeroDuration(string(localBuf)))
125 }
126 })
127 }
128 })
129 }
130 })
131 }
OLDNEW
« no previous file with comments | « milo/frontend/main.go ('k') | milo/frontend/middleware.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698