diff --git a/go.mod b/go.mod index 08de487..23ab94b 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/jackc/pgtype v1.6.2 github.com/jackc/pgx/v4 v4.10.1 github.com/jpillora/backoff v1.0.0 - github.com/rs/zerolog v1.21.0 + github.com/rs/zerolog v1.26.1 github.com/spf13/cobra v1.1.3 github.com/stretchr/testify v1.7.0 github.com/tcolgate/mp3 v0.0.0-20170426193717-e79c5a46d300 @@ -26,7 +26,7 @@ require ( github.com/wellington/go-libsass v0.9.2 github.com/yuin/goldmark v1.4.1 github.com/yuin/goldmark-highlighting v0.0.0-20210516132338-9216f9c5aa01 - golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 + golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d ) @@ -56,8 +56,8 @@ require ( github.com/mitchellh/reflectwalk v1.0.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 // indirect - golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 // indirect + golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d // indirect + golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e // indirect golang.org/x/text v0.3.6 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect diff --git a/go.sum b/go.sum index bb9c285..e99a90f 100644 --- a/go.sum +++ b/go.sum @@ -77,6 +77,7 @@ github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -100,6 +101,7 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -287,10 +289,11 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= -github.com/rs/zerolog v1.21.0 h1:Q3vdXlfLNT+OftyBHsU0Y445MD+8m8axjKgf2si0QcM= -github.com/rs/zerolog v1.21.0/go.mod h1:ZPhntP/xmq1nnND05hhpAh2QMhSsA4UN3MGZ6O2J3hM= +github.com/rs/zerolog v1.26.1 h1:/ihwxqH+4z8UxyI70wM1z9yCvkWcfz/a3mj48k/Zngc= +github.com/rs/zerolog v1.26.1/go.mod h1:/wSSJWX7lVrsOwlbyTRSOJvqRlc+WjWlfes+CiJ+tmc= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= @@ -336,8 +339,8 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1 github.com/wellington/go-libsass v0.9.2 h1:6Ims04UDdBs6/CGSVK5JC8FNikR5ssrsMMKE/uaO5Q8= github.com/wellington/go-libsass v0.9.2/go.mod h1:mxgxgam0N0E+NAUMHLcu20Ccfc3mVpDkyrLDayqfiTs= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.6/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark-highlighting v0.0.0-20210516132338-9216f9c5aa01 h1:0SJnXjE4jDClMW6grE0xpNhwpqbPwkBTn8zpVw5C0SI= github.com/yuin/goldmark-highlighting v0.0.0-20210516132338-9216f9c5aa01/go.mod h1:TwKQPa5XkCCRC2GRZ5wtfNUTQ2+9/i19mGRijFeJ4BE= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= @@ -363,8 +366,8 @@ golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e h1:1SzTfNOXwIS2oWiMF+6qu0OUDKb0dauo6MoDUQyu+yU= +golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -385,7 +388,7 @@ golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -401,9 +404,9 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d h1:20cMwl2fHAzkJMEA+8J4JgqBQcQGzbisXo31MIeenXI= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -412,7 +415,7 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -435,10 +438,10 @@ golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200413165638-669c56c373c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e h1:WUoyKPm6nCo1BnNUvPGnFG3T5DUVem42yDJZZ4CNxMA= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -470,7 +473,7 @@ golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/src/hmnurl/hmnurl_test.go b/src/hmnurl/hmnurl_test.go index 9c18d64..ee861d6 100644 --- a/src/hmnurl/hmnurl_test.go +++ b/src/hmnurl/hmnurl_test.go @@ -26,10 +26,18 @@ func TestUrl(t *testing.T) { }) } +var hmn = HMNProjectContext +var hero = UrlContext{ + PersonalProject: false, + ProjectID: 2, + ProjectSlug: "hero", + ProjectName: "Handmade Hero", +} + func TestHomepage(t *testing.T) { AssertRegexMatch(t, BuildHomepage(), RegexHomepage, nil) - AssertRegexMatch(t, BuildProjectHomepage("hero"), RegexHomepage, nil) - AssertSubdomain(t, BuildProjectHomepage("hero"), "hero") + AssertRegexMatch(t, hero.BuildHomepage(), RegexHomepage, nil) + AssertSubdomain(t, hero.BuildHomepage(), "hero") } func TestShowcase(t *testing.T) { @@ -87,7 +95,6 @@ func TestPasswordReset(t *testing.T) { func TestStaticPages(t *testing.T) { AssertRegexMatch(t, BuildManifesto(), RegexManifesto, nil) AssertRegexMatch(t, BuildAbout(), RegexAbout, nil) - AssertRegexMatch(t, BuildCodeOfConduct(), RegexCodeOfConduct, nil) AssertRegexMatch(t, BuildCommunicationGuidelines(), RegexCommunicationGuidelines, nil) AssertRegexMatch(t, BuildContactPage(), RegexContactPage, nil) AssertRegexMatch(t, BuildMonthlyUpdatePolicy(), RegexMonthlyUpdatePolicy, nil) @@ -133,12 +140,12 @@ func TestProjectNew(t *testing.T) { AssertRegexMatch(t, BuildProjectNew(), RegexProjectNew, nil) } -func TestProjectNotApproved(t *testing.T) { - AssertRegexMatch(t, BuildProjectNotApproved("test"), RegexProjectNotApproved, map[string]string{"slug": "test"}) +func TestPersonalProject(t *testing.T) { + AssertRegexMatch(t, BuildPersonalProject(123, "test"), RegexPersonalProject, nil) } func TestProjectEdit(t *testing.T) { - AssertRegexMatch(t, BuildProjectEdit("test", "foo"), RegexProjectEdit, map[string]string{"slug": "test"}) + AssertRegexMatch(t, hero.BuildProjectEdit("foo"), RegexProjectEdit, nil) } func TestPodcast(t *testing.T) { @@ -166,101 +173,100 @@ func TestPodcastRSS(t *testing.T) { } func TestForum(t *testing.T) { - AssertRegexMatch(t, BuildForum("", nil, 1), RegexForum, nil) - AssertRegexMatch(t, BuildForum("", []string{"wip"}, 2), RegexForum, map[string]string{"subforums": "wip", "page": "2"}) - AssertRegexMatch(t, BuildForum("", []string{"sub", "wip"}, 2), RegexForum, map[string]string{"subforums": "sub/wip", "page": "2"}) - AssertSubdomain(t, BuildForum("hmn", nil, 1), "") - AssertSubdomain(t, BuildForum("", nil, 1), "") - AssertSubdomain(t, BuildForum("hero", nil, 1), "hero") - assert.Panics(t, func() { BuildForum("", nil, 0) }) - assert.Panics(t, func() { BuildForum("", []string{"", "wip"}, 1) }) - assert.Panics(t, func() { BuildForum("", []string{" ", "wip"}, 1) }) - assert.Panics(t, func() { BuildForum("", []string{"wip/jobs"}, 1) }) + AssertRegexMatch(t, hmn.BuildForum(nil, 1), RegexForum, nil) + AssertRegexMatch(t, hmn.BuildForum([]string{"wip"}, 2), RegexForum, map[string]string{"subforums": "wip", "page": "2"}) + AssertRegexMatch(t, hmn.BuildForum([]string{"sub", "wip"}, 2), RegexForum, map[string]string{"subforums": "sub/wip", "page": "2"}) + AssertSubdomain(t, hmn.BuildForum(nil, 1), "") + AssertSubdomain(t, hero.BuildForum(nil, 1), "hero") + assert.Panics(t, func() { hmn.BuildForum(nil, 0) }) + assert.Panics(t, func() { hmn.BuildForum([]string{"", "wip"}, 1) }) + assert.Panics(t, func() { hmn.BuildForum([]string{" ", "wip"}, 1) }) + assert.Panics(t, func() { hmn.BuildForum([]string{"wip/jobs"}, 1) }) } func TestForumNewThread(t *testing.T) { - AssertRegexMatch(t, BuildForumNewThread("", []string{"sub", "wip"}, false), RegexForumNewThread, map[string]string{"subforums": "sub/wip"}) - AssertRegexMatch(t, BuildForumNewThread("", []string{"sub", "wip"}, true), RegexForumNewThreadSubmit, map[string]string{"subforums": "sub/wip"}) + AssertRegexMatch(t, hmn.BuildForumNewThread([]string{"sub", "wip"}, false), RegexForumNewThread, map[string]string{"subforums": "sub/wip"}) + AssertRegexMatch(t, hmn.BuildForumNewThread([]string{"sub", "wip"}, true), RegexForumNewThreadSubmit, map[string]string{"subforums": "sub/wip"}) } func TestForumThread(t *testing.T) { - AssertRegexMatch(t, BuildForumThread("", nil, 1, "", 1), RegexForumThread, map[string]string{"threadid": "1"}) - AssertRegexMatch(t, BuildForumThread("", nil, 1, "thread/title/123http://", 2), RegexForumThread, map[string]string{"threadid": "1", "page": "2"}) - AssertRegexMatch(t, BuildForumThreadWithPostHash("", nil, 1, "thread/title/123http://", 2, 123), RegexForumThread, map[string]string{"threadid": "1", "page": "2"}) - AssertSubdomain(t, BuildForumThread("hero", nil, 1, "", 1), "hero") - assert.Panics(t, func() { BuildForumThread("", nil, -1, "", 1) }) - assert.Panics(t, func() { BuildForumThread("", nil, 1, "", -1) }) + AssertRegexMatch(t, hmn.BuildForumThread(nil, 1, "", 1), RegexForumThread, map[string]string{"threadid": "1"}) + AssertRegexMatch(t, hmn.BuildForumThread(nil, 1, "thread/title/123http://", 2), RegexForumThread, map[string]string{"threadid": "1", "page": "2"}) + AssertRegexMatch(t, hmn.BuildForumThreadWithPostHash(nil, 1, "thread/title/123http://", 2, 123), RegexForumThread, map[string]string{"threadid": "1", "page": "2"}) + AssertSubdomain(t, hero.BuildForumThread(nil, 1, "", 1), "hero") + assert.Panics(t, func() { hmn.BuildForumThread(nil, -1, "", 1) }) + assert.Panics(t, func() { hmn.BuildForumThread(nil, 1, "", -1) }) } func TestForumPost(t *testing.T) { - AssertRegexMatch(t, BuildForumPost("", nil, 1, 2), RegexForumPost, map[string]string{"threadid": "1", "postid": "2"}) - AssertRegexNoMatch(t, BuildForumPost("", nil, 1, 2), RegexForumThread) - AssertSubdomain(t, BuildForumPost("hero", nil, 1, 2), "hero") - assert.Panics(t, func() { BuildForumPost("", nil, 1, -1) }) + AssertRegexMatch(t, hmn.BuildForumPost(nil, 1, 2), RegexForumPost, map[string]string{"threadid": "1", "postid": "2"}) + AssertRegexNoMatch(t, hmn.BuildForumPost(nil, 1, 2), RegexForumThread) + AssertSubdomain(t, hero.BuildForumPost(nil, 1, 2), "hero") + assert.Panics(t, func() { hmn.BuildForumPost(nil, 1, -1) }) } func TestForumPostDelete(t *testing.T) { - AssertRegexMatch(t, BuildForumPostDelete("", nil, 1, 2), RegexForumPostDelete, map[string]string{"threadid": "1", "postid": "2"}) - AssertRegexNoMatch(t, BuildForumPostDelete("", nil, 1, 2), RegexForumPost) - AssertSubdomain(t, BuildForumPostDelete("hero", nil, 1, 2), "hero") + AssertRegexMatch(t, hmn.BuildForumPostDelete(nil, 1, 2), RegexForumPostDelete, map[string]string{"threadid": "1", "postid": "2"}) + AssertRegexNoMatch(t, hmn.BuildForumPostDelete(nil, 1, 2), RegexForumPost) + AssertSubdomain(t, hero.BuildForumPostDelete(nil, 1, 2), "hero") } func TestForumPostEdit(t *testing.T) { - AssertRegexMatch(t, BuildForumPostEdit("", nil, 1, 2), RegexForumPostEdit, map[string]string{"threadid": "1", "postid": "2"}) - AssertRegexNoMatch(t, BuildForumPostEdit("", nil, 1, 2), RegexForumPost) - AssertSubdomain(t, BuildForumPostEdit("hero", nil, 1, 2), "hero") + AssertRegexMatch(t, hmn.BuildForumPostEdit(nil, 1, 2), RegexForumPostEdit, map[string]string{"threadid": "1", "postid": "2"}) + AssertRegexNoMatch(t, hmn.BuildForumPostEdit(nil, 1, 2), RegexForumPost) + AssertSubdomain(t, hero.BuildForumPostEdit(nil, 1, 2), "hero") } func TestForumPostReply(t *testing.T) { - AssertRegexMatch(t, BuildForumPostReply("", nil, 1, 2), RegexForumPostReply, map[string]string{"threadid": "1", "postid": "2"}) - AssertRegexNoMatch(t, BuildForumPostReply("", nil, 1, 2), RegexForumPost) - AssertSubdomain(t, BuildForumPostReply("hero", nil, 1, 2), "hero") + AssertRegexMatch(t, hmn.BuildForumPostReply(nil, 1, 2), RegexForumPostReply, map[string]string{"threadid": "1", "postid": "2"}) + AssertRegexNoMatch(t, hmn.BuildForumPostReply(nil, 1, 2), RegexForumPost) + AssertSubdomain(t, hero.BuildForumPostReply(nil, 1, 2), "hero") } func TestBlog(t *testing.T) { - AssertRegexMatch(t, BuildBlog("", 1), RegexBlog, nil) - AssertRegexMatch(t, BuildBlog("", 2), RegexBlog, map[string]string{"page": "2"}) - AssertSubdomain(t, BuildBlog("hero", 1), "hero") + AssertRegexMatch(t, hmn.BuildBlog(1), RegexBlog, nil) + AssertRegexMatch(t, hmn.BuildBlog(2), RegexBlog, map[string]string{"page": "2"}) + AssertSubdomain(t, hero.BuildBlog(1), "hero") } func TestBlogNewThread(t *testing.T) { - AssertRegexMatch(t, BuildBlogNewThread(""), RegexBlogNewThread, nil) - AssertSubdomain(t, BuildBlogNewThread(""), "") - AssertRegexMatch(t, BuildBlogNewThread("hero"), RegexBlogNewThread, nil) - AssertSubdomain(t, BuildBlogNewThread("hero"), "hero") + AssertRegexMatch(t, hmn.BuildBlogNewThread(), RegexBlogNewThread, nil) + AssertSubdomain(t, hmn.BuildBlogNewThread(), "") + AssertRegexMatch(t, hero.BuildBlogNewThread(), RegexBlogNewThread, nil) + AssertSubdomain(t, hero.BuildBlogNewThread(), "hero") } func TestBlogThread(t *testing.T) { - AssertRegexMatch(t, BuildBlogThread("", 1, ""), RegexBlogThread, map[string]string{"threadid": "1"}) - AssertRegexMatch(t, BuildBlogThread("", 1, ""), RegexBlogThread, map[string]string{"threadid": "1"}) - AssertRegexMatch(t, BuildBlogThread("", 1, "title/bla/http://"), RegexBlogThread, map[string]string{"threadid": "1"}) - AssertRegexMatch(t, BuildBlogThreadWithPostHash("", 1, "title/bla/http://", 123), RegexBlogThread, map[string]string{"threadid": "1"}) - AssertRegexNoMatch(t, BuildBlogThread("", 1, ""), RegexBlog) - AssertSubdomain(t, BuildBlogThread("hero", 1, ""), "hero") + AssertRegexMatch(t, hmn.BuildBlogThread(1, ""), RegexBlogThread, map[string]string{"threadid": "1"}) + AssertRegexMatch(t, hmn.BuildBlogThread(1, ""), RegexBlogThread, map[string]string{"threadid": "1"}) + AssertRegexMatch(t, hmn.BuildBlogThread(1, "title/bla/http://"), RegexBlogThread, map[string]string{"threadid": "1"}) + AssertRegexMatch(t, hmn.BuildBlogThreadWithPostHash(1, "title/bla/http://", 123), RegexBlogThread, map[string]string{"threadid": "1"}) + AssertRegexNoMatch(t, hmn.BuildBlogThread(1, ""), RegexBlog) + AssertSubdomain(t, hero.BuildBlogThread(1, ""), "hero") } func TestBlogPost(t *testing.T) { - AssertRegexMatch(t, BuildBlogPost("", 1, 2), RegexBlogPost, map[string]string{"threadid": "1", "postid": "2"}) - AssertRegexNoMatch(t, BuildBlogPost("", 1, 2), RegexBlogThread) - AssertSubdomain(t, BuildBlogPost("hero", 1, 2), "hero") + AssertRegexMatch(t, hmn.BuildBlogPost(1, 2), RegexBlogPost, map[string]string{"threadid": "1", "postid": "2"}) + AssertRegexNoMatch(t, hmn.BuildBlogPost(1, 2), RegexBlogThread) + AssertSubdomain(t, hero.BuildBlogPost(1, 2), "hero") } func TestBlogPostDelete(t *testing.T) { - AssertRegexMatch(t, BuildBlogPostDelete("", 1, 2), RegexBlogPostDelete, map[string]string{"threadid": "1", "postid": "2"}) - AssertRegexNoMatch(t, BuildBlogPostDelete("", 1, 2), RegexBlogPost) - AssertSubdomain(t, BuildBlogPostDelete("hero", 1, 2), "hero") + AssertRegexMatch(t, hmn.BuildBlogPostDelete(1, 2), RegexBlogPostDelete, map[string]string{"threadid": "1", "postid": "2"}) + AssertRegexNoMatch(t, hmn.BuildBlogPostDelete(1, 2), RegexBlogPost) + AssertSubdomain(t, hero.BuildBlogPostDelete(1, 2), "hero") } func TestBlogPostEdit(t *testing.T) { - AssertRegexMatch(t, BuildBlogPostEdit("", 1, 2), RegexBlogPostEdit, map[string]string{"threadid": "1", "postid": "2"}) - AssertRegexNoMatch(t, BuildBlogPostEdit("", 1, 2), RegexBlogPost) - AssertSubdomain(t, BuildBlogPostEdit("hero", 1, 2), "hero") + AssertRegexMatch(t, hmn.BuildBlogPostEdit(1, 2), RegexBlogPostEdit, map[string]string{"threadid": "1", "postid": "2"}) + AssertRegexNoMatch(t, hmn.BuildBlogPostEdit(1, 2), RegexBlogPost) + AssertSubdomain(t, hero.BuildBlogPostEdit(1, 2), "hero") } func TestBlogPostReply(t *testing.T) { - AssertRegexMatch(t, BuildBlogPostReply("", 1, 2), RegexBlogPostReply, map[string]string{"threadid": "1", "postid": "2"}) - AssertRegexNoMatch(t, BuildBlogPostReply("", 1, 2), RegexBlogPost) - AssertSubdomain(t, BuildBlogPostReply("hero", 1, 2), "hero") + AssertRegexMatch(t, hmn.BuildBlogPostReply(1, 2), RegexBlogPostReply, map[string]string{"threadid": "1", "postid": "2"}) + AssertRegexNoMatch(t, hmn.BuildBlogPostReply(1, 2), RegexBlogPost) + AssertSubdomain(t, hero.BuildBlogPostReply(1, 2), "hero") } func TestLibrary(t *testing.T) { @@ -280,20 +286,20 @@ func TestLibraryResource(t *testing.T) { } func TestEpisodeGuide(t *testing.T) { - AssertRegexMatch(t, BuildEpisodeList("hero", ""), RegexEpisodeList, map[string]string{"topic": ""}) - AssertRegexMatch(t, BuildEpisodeList("hero", "code"), RegexEpisodeList, map[string]string{"topic": "code"}) - AssertSubdomain(t, BuildEpisodeList("hero", "code"), "hero") + AssertRegexMatch(t, hero.BuildEpisodeList(""), RegexEpisodeList, map[string]string{"topic": ""}) + AssertRegexMatch(t, hero.BuildEpisodeList("code"), RegexEpisodeList, map[string]string{"topic": "code"}) + AssertSubdomain(t, hero.BuildEpisodeList("code"), "hero") - AssertRegexMatch(t, BuildEpisode("hero", "code", "day001"), RegexEpisode, map[string]string{"topic": "code", "episode": "day001"}) - AssertSubdomain(t, BuildEpisode("hero", "code", "day001"), "hero") + AssertRegexMatch(t, hero.BuildEpisode("code", "day001"), RegexEpisode, map[string]string{"topic": "code", "episode": "day001"}) + AssertSubdomain(t, hero.BuildEpisode("code", "day001"), "hero") - AssertRegexMatch(t, BuildCineraIndex("hero", "code"), RegexCineraIndex, map[string]string{"topic": "code"}) - AssertSubdomain(t, BuildCineraIndex("hero", "code"), "hero") + AssertRegexMatch(t, hero.BuildCineraIndex("code"), RegexCineraIndex, map[string]string{"topic": "code"}) + AssertSubdomain(t, hero.BuildCineraIndex("code"), "hero") } func TestAssetUpload(t *testing.T) { - AssertRegexMatch(t, BuildAssetUpload("hero"), RegexAssetUpload, nil) - AssertSubdomain(t, BuildAssetUpload("hero"), "hero") + AssertRegexMatch(t, hero.BuildAssetUpload(), RegexAssetUpload, nil) + AssertSubdomain(t, hero.BuildAssetUpload(), "hero") } func TestProjectCSS(t *testing.T) { @@ -308,6 +314,10 @@ func TestAPICheckUsername(t *testing.T) { AssertRegexMatch(t, BuildAPICheckUsername(), RegexAPICheckUsername, nil) } +func TestTwitchEventSubCallback(t *testing.T) { + AssertRegexMatch(t, BuildTwitchEventSubCallback(), RegexTwitchEventSubCallback, nil) +} + func TestPublic(t *testing.T) { AssertRegexMatch(t, BuildPublic("test", false), RegexPublic, nil) AssertRegexMatch(t, BuildPublic("/test", true), RegexPublic, nil) @@ -324,8 +334,8 @@ func TestPublic(t *testing.T) { } func TestForumMarkRead(t *testing.T) { - AssertRegexMatch(t, BuildForumMarkRead("hero", 5), RegexForumMarkRead, map[string]string{"sfid": "5"}) - AssertSubdomain(t, BuildForumMarkRead("hero", 5), "hero") + AssertRegexMatch(t, hero.BuildForumMarkRead(5), RegexForumMarkRead, map[string]string{"sfid": "5"}) + AssertSubdomain(t, hero.BuildForumMarkRead(5), "hero") } func TestS3Asset(t *testing.T) { diff --git a/src/migration/todo.txt b/src/migration/todo.txt deleted file mode 100644 index 1168f26..0000000 --- a/src/migration/todo.txt +++ /dev/null @@ -1,25 +0,0 @@ -Clean this up once we get the website working ---------------------------------------------- -TODO: Questionable db tables that we inherited from Django: -* auth_permission -* auth_user_user_permissions -* django_admin_log -* django_content_type -* django_migrations -* django_session -* django_site - -TODO: Questionable db tables that we inherited from the old website: -* handmade_blacklistemail -* handmade_blacklisthostname -* handmade_communicationchoice -* handmade_communicationchoicelist -* handmade_communicationsubcategory -* handmade_communicationsubthread -* handmade_kunenapost -* handmade_license -* handmade_license_texts -* handmade_memberextended.joomlaid -* handmade_onetimetoken // Is this for password resets?? -* handmade_otherfile -* handmade_project_licenses diff --git a/src/website/routes_test.go b/src/website/routes_test.go index a706c5e..a452ef4 100644 --- a/src/website/routes_test.go +++ b/src/website/routes_test.go @@ -16,6 +16,9 @@ func TestLogContextErrors(t *testing.T) { err1 := errors.New("test error 1") err2 := errors.New("test error 2") + defer zerolog.SetGlobalLevel(zerolog.GlobalLevel()) + zerolog.SetGlobalLevel(zerolog.TraceLevel) + var buf bytes.Buffer logger := zerolog.New(&buf) logger.Print("sanity check")