test('page object composition supports many levels deep', function(assert){ let definition = { foo: { bar: { baz: "prop" } } }; let page = create(definition); let pageComposer = create({ bar: { baz: page } }); assert.ok(pageComposer); assert.ok(pageComposer.bar.baz); // test that the definition is stored "as is" let pageComposerDef = getPageObjectDefinition(pageComposer); assert.ok(pageComposerDef); assert.ok(pageComposerDef.bar); assert.notOk(isPageObject(pageComposerDef.bar)); assert.ok(pageComposer.bar.baz); assert.ok(isPageObject(pageComposerDef.bar.baz)); let bazDefiniton = getPageObjectDefinition(pageComposerDef.bar.baz); assert.ok(bazDefiniton); pageComposerDef.bar.baz = bazDefiniton; // cant do a true deep equal without firing of page object selectors assert.deepEqual(Object.keys(pageComposerDef), ["bar"]); assert.deepEqual(bazDefiniton, definition); });
test('each page object node stores its definition', function(assert) { let definition = { foo: { bar: { baz: "prop" } } }; let page = create(definition); let storedDef = getPageObjectDefinition(page); assert.ok(storedDef); assert.deepEqual(storedDef, definition); let fooDef = getPageObjectDefinition(page.foo); assert.ok(fooDef); assert.deepEqual(fooDef, { bar: { baz: "prop" } }); let barDef = getPageObjectDefinition(page.foo.bar); assert.ok(barDef); assert.deepEqual(barDef, { baz: "prop" }); });
test('can compose from page object nested within another page object', function(assert){ const { foo } = create({ foo: { scope: '.foo' } }); assert.ok(foo); assert.deepEqual(getPageObjectDefinition(foo), { scope: '.foo'}, "nested stores definition"); const bar = create({ foo }); assert.ok(bar); let barDefinition = getPageObjectDefinition(bar); assert.ok(barDefinition); assert.ok(barDefinition.foo); assert.ok(isPageObject(barDefinition.foo)); let fooDefFromBar = getPageObjectDefinition(bar.foo); assert.ok(fooDefFromBar); // cannot do a true deep equal since foo is a page object assert.deepEqual(Object.keys(barDefinition), ["foo"]); assert.deepEqual(fooDefFromBar, { scope: '.foo' }); });
test('page objects can be used as the definition to create', function(assert){ let definition = { foo: "prop" }; let page = create(definition); let pageComposer = create(page); assert.ok(pageComposer); assert.ok(pageComposer.foo); assert.deepEqual(getPageObjectDefinition(pageComposer), definition); });
test('page objects can be composed from other page objects', function(assert) { let definition = { foo: { bar: { baz: "prop" } } }; let page = create(definition); let pageComposer = create({ somePage: page }); assert.ok(pageComposer); assert.ok(pageComposer.somePage); let pageComposerDef = getPageObjectDefinition(pageComposer); assert.ok(pageComposerDef); assert.ok(isPageObject(pageComposerDef.somePage)); // we cant deep equal the definition since it contains a page object so we check the keys instead assert.deepEqual(Object.keys(pageComposerDef), ['somePage']); let somePageStoredDef = getPageObjectDefinition(pageComposerDef.somePage); assert.deepEqual(somePageStoredDef, definition); });
function() { return getPageObjectDefinition({}) },