From b9226661cbcb19b5c90c2fbb1318c5ec4928955c Mon Sep 17 00:00:00 2001 From: Ava Gaiety Wroten Date: Sat, 28 Dec 2019 22:43:05 -0600 Subject: [PATCH] Reordering tests --- .../components/recipe-list-test.js | 62 ++++++++++++++++--- 1 file changed, 55 insertions(+), 7 deletions(-) diff --git a/ember-ui/tests/integration/components/recipe-list-test.js b/ember-ui/tests/integration/components/recipe-list-test.js index c2ad487..f77ab5e 100644 --- a/ember-ui/tests/integration/components/recipe-list-test.js +++ b/ember-ui/tests/integration/components/recipe-list-test.js @@ -1,22 +1,70 @@ import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; import { setupMirage } from 'ember-cli-mirage/test-support'; -import { render } from '@ember/test-helpers'; +import { render, find, findAll, focus, triggerKeyEvent } from '@ember/test-helpers'; +import { drag } from 'ember-sortable/test-support/helpers'; import { hbs } from 'ember-cli-htmlbars'; module('Integration | Component | recipe-list', function(hooks) { setupRenderingTest(hooks); setupMirage(hooks); - test('it renders existing meals into a list', async function(assert) { - let store = this.owner.lookup('service:store'); - this.server.create('meal', { id: 1 }); - this.server.create('meal', { id: 2 }); - await store.findRecord('meal', 1); - await store.findRecord('meal', 2); + hooks.beforeEach(initMeals); + test('it renders existing meals into a list', async function(assert) { await render(hbs``); assert.dom('[data-test-id=recipe-item]').exists({ count: 2 }); }); + + test('it can focus meal wrappers', async function(assert) { + await render(hbs``); + + await focus('[data-sortable-handle]'); + + assert.equal(find('[data-sortable-handle]'), document.activeElement); + }); + + test('it can reorder meals via keyboard shortcuts', async function(assert) { + await render(hbs``); + + assert.dom(findAll('[data-test-id=recipe-name]')[0]).includesText('Meal 1'); + assert.dom(findAll('[data-test-id=recipe-name]')[1]).includesText('Meal 2'); + + await focus('[data-sortable-handle]'); // Not technically required, but emulates user interaction + await triggerKeyEvent('[data-sortable-handle]', 'keydown', 'Enter'); + await triggerKeyEvent('[data-sortable-handle]', 'keydown', 'ArrowDown'); + await triggerKeyEvent('[data-sortable-handle]', 'keydown', 'Enter'); + + assert.dom(findAll('[data-test-id=recipe-name]')[0]).includesText('Meal 2'); + assert.dom(findAll('[data-test-id=recipe-name]')[1]).includesText('Meal 1'); + }); + + test('it can drag and drop meals', async function(assert) { + await render(hbs``); + + assert.dom(findAll('[data-test-id=recipe-name]')[0]).includesText('Meal 1'); + assert.dom(findAll('[data-test-id=recipe-name]')[1]).includesText('Meal 2'); + + await drag('mouse', '[data-sortable-handle]', () => { return { dy: 100, dx: 0 } }); + + assert.dom(findAll('[data-test-id=recipe-name]')[0]).includesText('Meal 2'); + assert.dom(findAll('[data-test-id=recipe-name]')[1]).includesText('Meal 1'); + }); + + async function initMeals() { + let store = this.owner.lookup('service:store'); + let meal = { + area: 'area', + category: 'category', + ingredients: [ + { name: 'Love', measure: 'Infinity' }, + { name: 'Chocolate', measure: 'As much as you like!' }, + ], + }; + this.server.create('meal', Object.assign({}, meal, { name: 'Meal 1', id: 1 })); + this.server.create('meal', Object.assign({}, meal, { name: 'Meal 2', id: 2 })); + await store.findRecord('meal', 1); + await store.findRecord('meal', 2); + } });