@@ -4,13 +4,108 @@ import { test } from "uvu";
44import * as assert from "uvu/assert" ;
55let filePath = "./src/index.html" ;
66
7- test ( "simple test" , async ( ) => {
7+ // Helpers
8+
9+ const hasAllClasses = ( dom , id , classes ) =>
10+ classes . every ( ( val ) => dom . window . document . getElementById ( id ) . getAttribute ( "class" ) . split ( " " ) . includes ( val ) ) ;
11+
12+ // Tests
13+
14+ test ( "Nav Buttons Don't Work (Desktop & Mobile)" , async ( ) => {
15+ const dom = await JSDOM . fromFile ( filePath , {
16+ runScripts : "dangerously" ,
17+ resources : "usable" ,
18+ } ) ;
19+ await setTimeout ( 10 ) ;
20+ assert . is ( dom . window . document . getElementById ( "nav-logo" ) . getAttribute ( "href" ) , "#header" ) ;
21+ assert . is ( dom . window . document . getElementById ( "nav-challenges" ) . getAttribute ( "href" ) , "#challenges" ) ;
22+ assert . is ( dom . window . document . getElementById ( "nav-signup" ) . getAttribute ( "href" ) , "#signup" ) ;
23+ assert . is ( dom . window . document . getElementById ( "mobile-nav-challenges" ) . getAttribute ( "href" ) , "#challenges" ) ;
24+ assert . is ( dom . window . document . getElementById ( "mobile-nav-signup" ) . getAttribute ( "href" ) , "#signup" ) ;
25+ } ) ;
26+
27+ test ( "Desktop Nav Is Visible on Mobile" , async ( ) => {
28+ const dom = await JSDOM . fromFile ( filePath , {
29+ runScripts : "dangerously" ,
30+ resources : "usable" ,
31+ } ) ;
32+ await setTimeout ( 10 ) ;
33+ assert . ok ( hasAllClasses ( dom , "nav-challenges" , [ "hide-small" ] ) ) ;
34+ assert . ok ( hasAllClasses ( dom , "nav-signup" , [ "hide-small" ] ) ) ;
35+ } ) ;
36+
37+ test ( "Invert Banner Image Colors" , async ( ) => {
38+ const dom = await JSDOM . fromFile ( filePath , {
39+ runScripts : "dangerously" ,
40+ resources : "usable" ,
41+ } ) ;
42+ await setTimeout ( 10 ) ;
43+ let banner = dom . window . document . getElementById ( "jumbo-image" ) ;
44+ assert . is ( dom . window . getComputedStyle ( banner ) . _values [ "filter" ] , "invert(1)" ) ;
45+ } ) ;
46+
47+ test ( "Tiles Need to be 2x2 Grid" , async ( ) => {
48+ const dom = await JSDOM . fromFile ( filePath , {
49+ runScripts : "dangerously" ,
50+ resources : "usable" ,
51+ } ) ;
52+ await setTimeout ( 10 ) ;
53+ let grid = dom . window . document . getElementById ( "challenge-grid" ) ;
54+ assert . ok (
55+ [ "repeat(2,1fr)" , "1fr1fr" , "50%50%" ] . includes (
56+ dom . window . getComputedStyle ( grid ) . _values [ "grid-template-columns" ] . replace ( / \s / g, "" )
57+ )
58+ ) ;
59+ } ) ;
60+
61+ test ( "Improve Errors on Signup Form Validation (Empty Email)" , async ( ) => {
62+ const dom = await JSDOM . fromFile ( filePath , {
63+ runScripts : "dangerously" ,
64+ resources : "usable" ,
65+ } ) ;
66+ await setTimeout ( 150 ) ; // Need to wait for script to load
67+
68+ // simulate empty email signup
69+ dom . window . document . querySelector ( "button" ) . dispatchEvent ( new dom . window . MouseEvent ( "click" ) ) ;
70+
71+ assert . is ( dom . window . document . getElementById ( "success-message" ) . hidden , true ) ;
72+ assert . is ( dom . window . document . getElementById ( "empty-error-message" ) . hidden , false ) ;
73+ assert . is ( dom . window . document . getElementById ( "taken-error-message" ) . hidden , true ) ;
74+ } ) ;
75+
76+ test ( "Improve Errors on Signup Form Validation (Taken Email)" , async ( ) => {
877 const dom = await JSDOM . fromFile ( filePath , {
978 runScripts : "dangerously" ,
1079 resources : "usable" ,
1180 } ) ;
12- await setTimeout ( 10 ) ; // let css load
13- assert . is ( dom . window . document . querySelector ( "h1" ) . innerHTML , "Hello World" ) ;
81+ await setTimeout ( 150 ) ; // Need to wait for script to load
82+
83+ dom . window . document . getElementById ( "email" ) . value = "hello@world.com" ;
84+ dom . window . document . querySelector ( "button" ) . dispatchEvent ( new dom . window . MouseEvent ( "click" ) ) ;
85+
86+ assert . is ( dom . window . document . getElementById ( "success-message" ) . hidden , true ) ;
87+ assert . is ( dom . window . document . getElementById ( "empty-error-message" ) . hidden , true ) ;
88+ assert . is ( dom . window . document . getElementById ( "taken-error-message" ) . hidden , false ) ;
89+ } ) ;
90+
91+ test ( "Improve Errors on Signup Form Validation (Repeat Email)" , async ( ) => {
92+ const dom = await JSDOM . fromFile ( filePath , {
93+ runScripts : "dangerously" ,
94+ resources : "usable" ,
95+ } ) ;
96+ await setTimeout ( 150 ) ; // Need to wait for script to load
97+
98+ dom . window . document . getElementById ( "email" ) . value = "test@new.com" ;
99+ dom . window . document . querySelector ( "button" ) . dispatchEvent ( new dom . window . MouseEvent ( "click" ) ) ;
100+
101+ assert . is ( dom . window . document . getElementById ( "success-message" ) . hidden , false ) ;
102+ assert . is ( dom . window . document . getElementById ( "empty-error-message" ) . hidden , true ) ;
103+ assert . is ( dom . window . document . getElementById ( "taken-error-message" ) . hidden , true ) ;
104+
105+ dom . window . document . querySelector ( "button" ) . dispatchEvent ( new dom . window . MouseEvent ( "click" ) ) ;
106+ assert . is ( dom . window . document . getElementById ( "success-message" ) . hidden , true ) ;
107+ assert . is ( dom . window . document . getElementById ( "empty-error-message" ) . hidden , true ) ;
108+ assert . is ( dom . window . document . getElementById ( "taken-error-message" ) . hidden , false ) ;
14109} ) ;
15110
16111test . run ( ) ;
0 commit comments