1+ describe ( 'Angular-Validation Custom Javascript Validation Tests:' , function ( ) {
2+ // global variables
3+ var formElementNames = [ 'input1' , 'input2' , 'input3' , 'input4' ] ;
4+ var errorMessages = [
5+ 'May only contain letters. Must be at least 2 characters. Field is required.' ,
6+ 'May only contain letters. Must be at least 2 characters. Field is required.' ,
7+ 'May only contain letters. Must be at least 2 characters. Field is required.' ,
8+ 'May only contain letters. Must be at least 2 characters. Field is required.'
9+ ] ;
10+ var errorTooShort = [
11+ 'Must be at least 2 characters. Alternate error message.' ,
12+ 'Must be at least 2 characters. Returned error from custom function.' ,
13+ 'Must be at least 2 characters. Alternate error message.' ,
14+ 'Must be at least 2 characters. Returned error from custom function.'
15+ ] ;
16+ var oneChar = [ 'a' , 'd' , 'a' , 'd' ] ;
17+ var validInputTexts = [ 'abc' , 'def' , 'abc' , 'def' ] ;
18+
19+ describe ( 'When choosing `more-examples` custom javascript' , function ( ) {
20+ it ( 'Should navigate to home page' , function ( ) {
21+ browser . get ( 'http://localhost/Github/angular-validation/more-examples/customJavascript/' ) ;
22+
23+ // Find the title element
24+ var titleElement = element ( by . css ( 'h2' ) ) ;
25+ expect ( titleElement . getText ( ) ) . toEqual ( 'Example of Angular-Validation with Custom Javascript function' ) ;
26+ } ) ;
27+
28+ it ( 'Should have multiple errors in Directive & Service validation summary' , function ( ) {
29+ var itemRows = element . all ( by . binding ( 'message' ) ) ;
30+ var inputName ;
31+
32+ for ( var i = 0 , j = 0 , ln = itemRows . length ; i < ln ; i ++ ) {
33+ expect ( itemRows . get ( i ) . getText ( ) ) . toEqual ( defaultErrorMessages [ i ] ) ;
34+ }
35+ } ) ;
36+
37+ it ( 'Should check that both submit buttons are disabled' , function ( ) {
38+ var elmSubmit1 = $ ( '[name=btn_ngDisabled1]' ) ;
39+ expect ( elmSubmit1 . isEnabled ( ) ) . toBe ( false ) ;
40+
41+ var elmSubmit2 = $ ( '[name=btn_ngDisabled2]' ) ;
42+ expect ( elmSubmit2 . isEnabled ( ) ) . toBe ( false ) ;
43+ } ) ;
44+
45+ it ( 'Should click, blur on each form elements and error message should display on each of them' , function ( ) {
46+ for ( var i = 0 , ln = formElementNames . length ; i < ln ; i ++ ) {
47+ var elmInput = $ ( '[name=' + formElementNames [ i ] + ']' ) ;
48+ elmInput . click ( ) ;
49+ elmInput . sendKeys ( protractor . Key . TAB ) ;
50+
51+ var elmError = $ ( '.validation-' + formElementNames [ i ] ) ;
52+ expect ( elmError . getText ( ) ) . toEqual ( errorMessages [ i ] ) ;
53+ }
54+ } ) ;
55+
56+ it ( 'Should enter 1 character in all inputs and display minChar error message' , function ( ) {
57+ for ( var i = 0 , ln = formElementNames . length ; i < ln ; i ++ ) {
58+ var elmInput = $ ( '[name=' + formElementNames [ i ] + ']' ) ;
59+ elmInput . click ( ) ;
60+ elmInput . sendKeys ( 'a' ) ;
61+
62+ var elmError = $ ( '.validation-' + formElementNames [ i ] ) ;
63+ expect ( elmError . getText ( ) ) . toEqual ( errorTooShort [ i ] ) ;
64+ }
65+ } ) ;
66+
67+ it ( 'Should enter valid text and make error go away' , function ( ) {
68+ for ( var i = 0 , ln = formElementNames . length ; i < ln ; i ++ ) {
69+ var elmInput = $ ( '[name=' + formElementNames [ i ] + ']' ) ;
70+ elmInput . click ( ) ;
71+ clearInput ( elmInput ) ;
72+ elmInput . sendKeys ( validInputTexts [ i ] ) ;
73+ elmInput . sendKeys ( protractor . Key . TAB ) ;
74+
75+ var elmError = $ ( '.validation-' + formElementNames [ i ] ) ;
76+ expect ( elmError . getText ( ) ) . toEqual ( '' ) ;
77+ }
78+ } ) ;
79+
80+ it ( 'Should have both validation summary empty' , function ( ) {
81+ var itemRows = element . all ( by . binding ( 'message' ) ) ;
82+ expect ( itemRows . count ( ) ) . toBe ( 0 ) ;
83+ } ) ;
84+
85+ it ( 'Should check that both submit buttons are now enabled' , function ( ) {
86+ var elmSubmit1 = $ ( '[name=btn_ngDisabled1]' ) ;
87+ expect ( elmSubmit1 . isEnabled ( ) ) . toBe ( true ) ;
88+
89+ var elmSubmit2 = $ ( '[name=btn_ngDisabled2]' ) ;
90+ expect ( elmSubmit2 . isEnabled ( ) ) . toBe ( true ) ;
91+ } ) ;
92+
93+ it ( 'Should navigate to home page' , function ( ) {
94+ browser . get ( 'http://localhost/Github/angular-validation/more-examples/customJavascript/' ) ;
95+
96+ // Find the title element
97+ var titleElement = element ( by . css ( 'h2' ) ) ;
98+ expect ( titleElement . getText ( ) ) . toEqual ( 'Example of Angular-Validation with Custom Javascript function' ) ;
99+ } ) ;
100+
101+ it ( 'Should click on both ngSubmit buttons' , function ( ) {
102+ var btnNgSubmit1 = $ ( '[name=btn_ngSubmit1]' ) ;
103+ btnNgSubmit1 . click ( ) ;
104+
105+ var btnNgSubmit2 = $ ( '[name=btn_ngSubmit2]' ) ;
106+ btnNgSubmit2 . click ( ) ;
107+ } ) ;
108+
109+ it ( 'Should show error message on each inputs' , function ( ) {
110+ for ( var i = 0 , ln = formElementNames . length ; i < ln ; i ++ ) {
111+ var elmInput = $ ( '[name=' + formElementNames [ i ] + ']' ) ;
112+ elmInput . click ( ) ;
113+ elmInput . sendKeys ( protractor . Key . TAB ) ;
114+
115+ var elmError = $ ( '.validation-' + formElementNames [ i ] ) ;
116+ expect ( elmError . getText ( ) ) . toEqual ( errorMessages [ i ] ) ;
117+ }
118+ } ) ;
119+
120+ } ) ;
121+ } ) ;
122+
123+ /** From a given input name, clear the input
124+ * @param string input name
125+ */
126+ function clearInput ( elem ) {
127+ elem . getAttribute ( 'value' ) . then ( function ( text ) {
128+ var len = text . length
129+ var backspaceSeries = Array ( len + 1 ) . join ( protractor . Key . BACK_SPACE ) ;
130+ elem . sendKeys ( backspaceSeries ) ;
131+ } )
132+ }
0 commit comments