import { Component, FormView, Model } from "../../src/core"; import { FormState } from "../../src/core/formstate"; export default function FormViewSpec(){ describe("FormView", function(){ describe("#_findGroups", function(){ it( "finds forms within boundinx box", function() { let el = document.createElement( "div" ), view = new FormView({ el: el }); el.innerHTML = `
`; let forms = (view)._findGroups(); expect( Array.isArray( forms ) ).toBe( true ); expect( forms[ 0 ].dataset[ "ngGroup" ] ).toBe( "foo" ); expect( forms[ 1 ].dataset[ "ngGroup" ] ).toBe( "bar" ); }); it( "finds form on boundinx box", function() { let el = document.createElement( "form" ), view = new FormView({ el: el }); el.innerHTML = `
`; el.dataset[ "ngGroup" ] = "baz" let forms = (view)._findGroups(); // If boundinx box not inner forms allowed expect( forms.length ).toBe( 1 ); expect( forms[ 0 ].dataset[ "ngGroup" ] ).toBe( "baz" ); }); }); describe("#_bindGroup", function(){ it( "sets a model to this.models.FormName.group", function() { let el = document.createElement( "form" ), view = new FormView({ el: el }); el.dataset[ "ngGroup" ] = "baz"; (view)._bindGroup( el, "baz" ); let model = view.models.get( "baz.group" ); expect( model instanceof FormState ).toBe( true ); }); }); describe("#_findGroupElements", function(){ it( "finds all form inputs", function() { let el = document.createElement( "form" ), next: HTMLInputElement, view = new FormView({ el: el }); el.dataset[ "ngGroup" ] = "baz"; el.innerHTML = `
`; let els = (view)._findGroupElements( el ); expect( Array.isArray( els ) ).toBe( true ); expect( els.length ).toBe( 4 ); }); }); describe("#_bindGroupElement", function(){ it( "finds all form elements", function() { let el = document.createElement( "form" ), next: HTMLInputElement, view = new FormView({ el: el }); el.dataset[ "ngGroup" ] = "baz"; (view)._bindGroup( el, "foo" ); (view)._bindGroupElement( "foo", "bar" ); let model = view.models.get( "foo.bar" ); expect( model instanceof FormState ).toBe( true ); }); }); describe("FormView", function(){ it( "updates control and group on valueMissing", function( done ) { @Component({ tagName: "ng-component", template: `
` }) class TestView extends FormView { } let view = new TestView(); view.render(); let group = view.models.get( "foo.group" ), control = view.models.get( "foo.bar" ); view.testInput( "foo.bar", "" ) .then(() => { expect( control.get( "valid" ) ).toBe( false ); expect( control.get( "valueMissing" ) ).toBe( true ); expect( group.get( "valid" ) ).toBe( false ); done(); }); }); it( "updates control and group on rangeOverflow", function( done ) { @Component({ tagName: "ng-component", template: `
` }) class TestView extends FormView { } let view = new TestView(); view.render(); let group = view.models.get( "foo.group" ), control = view.models.get( "foo.bar" ); view.testInput( "foo.bar", 20 ) .then(() => { expect( control.get( "valid" ) ).toBe( false ); expect( control.get( "rangeOverflow" ) ).toBe( true ); expect( group.get( "valid" ) ).toBe( false ); done(); }); }); it( "updates control and group on patternMismatch", function( done ) { @Component({ tagName: "ng-component", template: `
` }) class TestView extends FormView { } let view = new TestView(); view.render(); let group = view.models.get( "foo.group" ), control = view.models.get( "foo.bar" ); view.testInput( "foo.bar", "in" ) .then(() => { expect( control.get( "valid" ) ).toBe( false ); expect( control.get( "patternMismatch" ) ).toBe( true ); expect( group.get( "valid" ) ).toBe( false ); done(); }); }); it( "updates control and group on typeMismatch", function( done ) { @Component({ tagName: "ng-component", template: `
` }) class TestView extends FormView { } let view = new TestView(); view.render(); let group = view.models.get( "foo.group" ), control = view.models.get( "foo.bar" ); view.testInput( "foo.bar", "invalid" ) .then(() => { expect( control.get( "valid" ) ).toBe( false ); expect( control.get( "typeMismatch" ) ).toBe( true ); expect( group.get( "valid" ) ).toBe( false ); done(); }); }); }); }); }