1
0
Fork 0

All basic tests passing

This commit is contained in:
Ava Gaiety Wroten 2019-12-27 22:51:18 -06:00
parent d7c6f664d0
commit e4dbc78620
9 changed files with 94 additions and 61 deletions

View file

@ -6,6 +6,7 @@
{{#each group.model as |meal|}} {{#each group.model as |meal|}}
<group.item <group.item
@model={{meal}} @model={{meal}}
data-test-id="recipe-item"
as |item|> as |item|>
<item.handle> <item.handle>
<RecipePreview @meal={{meal}} {{on "click" this.openMealDetails}} /> <RecipePreview @meal={{meal}} {{on "click" this.openMealDetails}} />

View file

@ -1,18 +1,18 @@
<LinkTo @route="meal" @model={{@meal}} class="block bg-white border border-gray-400 focus:border-teal-500 focus:shadow-sm focus:bg-teal-100 outline-none"> <LinkTo @route="meal" @model={{@meal}} class="block bg-white border border-gray-400 focus:border-teal-500 focus:shadow-sm focus:bg-teal-100 outline-none" data-test-id="recipe-link">
<div class="max-w-sm w-full lg:max-w-full lg:flex"> <div class="max-w-sm w-full lg:max-w-full lg:flex">
<div class="h-48 lg:h-auto lg:w-48 flex-none"> <div class="h-48 lg:h-auto lg:w-48 flex-none">
<img src={{@meal.thumbnailUrl}} alt="" class="h-full w-full object-cover"> <img src={{@meal.thumbnailUrl}} alt="" class="h-full w-full object-cover" data-test-id="recipe-preview-image">
</div> </div>
<div class="p-4 flex flex-col justify-between leading-normal"> <div class="p-4 flex flex-col justify-between leading-normal">
<div class="mb-8"> <div class="mb-8">
<div class="text-gray-900 font-bold text-xl mb-2"> <div class="text-gray-900 font-bold text-xl mb-2" data-test-id="recipe-name">
{{@meal.name}} {{@meal.name}}
</div> </div>
<p class="text-gray-700 text-base"> <p class="text-gray-700 text-base" data-test-id="recipe-ingredients-list">
{{@meal.ingredientsList}} {{@meal.ingredientsList}}
</p> </p>
</div> </div>
<div> <div data-test-id="recipe-tags">
<MealTag>{{@meal.category}}</MealTag> <MealTag>{{@meal.category}}</MealTag>
<MealTag>{{@meal.area}}</MealTag> <MealTag>{{@meal.area}}</MealTag>
</div> </div>

View file

@ -6,13 +6,13 @@ export default class MealModel extends Model {
@attr area; @attr area;
@attr category; @attr category;
@attr dateModified; @attr dateModified;
@attr ingredients;
@attr instructions; @attr instructions;
@attr name; @attr name;
@attr sourceUrl; @attr sourceUrl;
@attr tags; @attr tags;
@attr thumbnailUrl; @attr thumbnailUrl;
@attr youtubeUrl; @attr youtubeUrl;
@attr ingredients;
@attr('number', { defaultValue: Infinity }) listOrder; @attr('number', { defaultValue: Infinity }) listOrder;

View file

@ -1,31 +1,12 @@
export default function() { export default function() {
// These comments are here to help you get started. Feel free to delete them.
/*
Config (with defaults).
Note: these only affect routes defined *after* them!
*/
// this.urlPrefix = ''; // make this `http://localhost:8080`, for example, if your API is on a different server
// this.namespace = ''; // make this `/api`, for example, if your API is namespaced
// this.timing = 400; // delay for each request, automatically set to 0 during testing
/*
Shorthand cheatsheet:
this.get('/posts');
this.post('/posts');
this.get('/posts/:id');
this.put('/posts/:id'); // or this.patch
this.del('/posts/:id');
https://www.ember-cli-mirage.com/docs/route-handlers/shorthands
*/
this.urlPrefix = 'http://localhost:8000/'; this.urlPrefix = 'http://localhost:8000/';
this.get('/meals/random', (schema, request) => { this.get('/meals/random', (schema) => {
return schema.meals.find(1); let id = 'random';
schema.meals.create({id});
return schema.meals.find(id);
}); });
this.get('/meal/:id');
} }

View file

@ -0,0 +1,5 @@
import { Factory } from 'ember-cli-mirage';
export default Factory.extend({
ingredients: [],
});

View file

@ -8,9 +8,14 @@ module('Integration | Component | recipe-add', function(hooks) {
setupRenderingTest(hooks); setupRenderingTest(hooks);
setupMirage(hooks); setupMirage(hooks);
test('it renders', async function(assert) { test('it adds a new recipe (meal) when button is clicked', async function(assert) {
await render(hbs`<RecipeAdd />`); await render(hbs`<RecipeAdd />`);
let store = this.owner.lookup('service:store');
await click('[data-test-id=recipe-add-button]'); await click('[data-test-id=recipe-add-button]');
let randomMeal = await store.findRecord('meal', 'random');
assert.ok(randomMeal);
assert.equal(store.peekAll('meal').length, 1);
}); });
}); });

View file

@ -1,26 +1,22 @@
import { module, test } from 'qunit'; import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit'; import { setupRenderingTest } from 'ember-qunit';
import { setupMirage } from 'ember-cli-mirage/test-support';
import { render } from '@ember/test-helpers'; import { render } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars'; import { hbs } from 'ember-cli-htmlbars';
module('Integration | Component | recipe-list', function(hooks) { module('Integration | Component | recipe-list', function(hooks) {
setupRenderingTest(hooks); setupRenderingTest(hooks);
setupMirage(hooks);
test('it renders', async function(assert) { test('it renders existing meals into a list', async function(assert) {
// Set any properties with this.set('myProperty', 'value'); let store = this.owner.lookup('service:store');
// Handle any actions with this.set('myAction', function(val) { ... }); this.server.create('meal', { id: 1 });
this.server.create('meal', { id: 2 });
await store.findRecord('meal', 1);
await store.findRecord('meal', 2);
await render(hbs`<RecipeList />`); await render(hbs`<RecipeList />`);
assert.equal(this.element.textContent.trim(), ''); assert.dom('[data-test-id=recipe-item]').exists({ count: 2 });
// Template block usage:
await render(hbs`
<RecipeList>
template block text
</RecipeList>
`);
assert.equal(this.element.textContent.trim(), 'template block text');
}); });
}); });

View file

@ -1,26 +1,54 @@
import { module, test } from 'qunit'; import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit'; import { setupRenderingTest } from 'ember-qunit';
import { setupMirage } from 'ember-cli-mirage/test-support';
import { render } from '@ember/test-helpers'; import { render } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars'; import { hbs } from 'ember-cli-htmlbars';
module('Integration | Component | recipe-preview', function(hooks) { module('Integration | Component | recipe-preview', function(hooks) {
setupRenderingTest(hooks); setupRenderingTest(hooks);
setupMirage(hooks);
test('it renders', async function(assert) { hooks.beforeEach(initMeal);
// Set any properties with this.set('myProperty', 'value');
// Handle any actions with this.set('myAction', function(val) { ... });
await render(hbs`<RecipePreview />`); test('it renders a wrapper href', async function(assert) {
await render(hbs`<RecipePreview @meal={{meal}} />`);
assert.equal(this.element.textContent.trim(), ''); assert.dom('[data-test-id=recipe-link]').hasTagName('a');
// Template block usage:
await render(hbs`
<RecipePreview>
template block text
</RecipePreview>
`);
assert.equal(this.element.textContent.trim(), 'template block text');
}); });
test('it renders recipe preview image', async function(assert) {
await render(hbs`<RecipePreview @meal={{meal}} />`);
assert.dom('[data-test-id=recipe-preview-image]').hasAttribute('src', 'image.jpg');
});
test('it renders recipe data as text', async function(assert) {
await render(hbs`<RecipePreview @meal={{meal}} />`);
assert.dom('[data-test-id=recipe-name]').hasText('Cookies');
assert.dom('[data-test-id=recipe-ingredients-list]').hasText('Love, Chocolate');
assert.dom('[data-test-id=recipe-tags]').includesText('Home');
assert.dom('[data-test-id=recipe-tags]').includesText('Desserts');
});
async function initMeal() {
let store = this.owner.lookup('service:store');
this.server.create('meal', {
area: 'Home',
category: 'Desserts',
id: 1,
ingredients: [
{
name: 'Love',
measure: 'Infinity',
}, {
name: 'Chocolate',
measure: 'As Much As You Desire',
},
],
name: 'Cookies',
thumbnailUrl: 'image.jpg',
});
this.set('meal', await store.findRecord('meal', 1));
}
}); });

View file

@ -4,10 +4,27 @@ import { setupTest } from 'ember-qunit';
module('Unit | Model | meal', function(hooks) { module('Unit | Model | meal', function(hooks) {
setupTest(hooks); setupTest(hooks);
// Replace this with your real tests.
test('it exists', function(assert) { test('it exists', function(assert) {
let store = this.owner.lookup('service:store'); let store = this.owner.lookup('service:store');
let model = store.createRecord('meal', {}); let model = store.createRecord('meal', {});
assert.ok(model); assert.ok(model);
}); });
test('it creates comma separated ingredients list', function(assert) {
let store = this.owner.lookup('service:store');
let model = store.createRecord('meal', {
ingredients: [
{
name: 'Love',
measure: 'Infinity',
}, {
name: 'Chocolate',
measure: 'As Much As You Desire',
},
],
});
assert.equal(model.ingredientsList, 'Love, Chocolate');
});
}); });