Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[tests] Cleanup tests #486

Merged
merged 1 commit into from
Feb 26, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { collection, count } from 'ember-classy-page-object';
import { collection } from 'ember-classy-page-object';
import { findElement } from 'ember-classy-page-object/extend';
import { getter } from 'ember-cli-page-object/macros';

import {
pressElement,
Expand All @@ -20,16 +19,16 @@ export default {
/**
* Retrieves selected header cell width.
*/
width: getter(function() {
get width() {
return findElement(this).offsetWidth;
}),
},

/**
* Retrieves selected header cell height.
*/
height: getter(function() {
get height() {
return findElement(this).offsetHeight;
}),
},

/**
* Resizes this column by dragging right border several pixels.
Expand Down Expand Up @@ -68,7 +67,6 @@ export default {
async moveByPixel(deltaX) {
let header = findElement(this);
let box = header.getBoundingClientRect();
let width = header.offsetLeft;
let startX = (box.right + box.left) / 2;

await this._moveByPixel(header, startX, deltaX);
Expand All @@ -82,15 +80,11 @@ export default {
}
}),

/**
* Returns the number of columns in header.
*/
columnCount: count('tr:eq(0) th'),
subcolumns: collection({
scope: 'tr:eq(1) th'
}),

/**
* Returns header width.
*/
width: getter(function() {
return findElement(this).offsetWidth;
rows: collection({
scope: 'tr'
})
};
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import PageObject, { alias } from 'ember-classy-page-object';
import EmberTableBodyPage from './-private/ember-table-body-page';
import EmberTableFooterPage from './-private/ember-table-footer-page';
import EmberTableHeaderPage from './-private/ember-table-header-page';
import { findElement } from 'ember-classy-page-object/extend';

import EmberTableBodyPage from './-private/ember-table-body';
import EmberTableFooterPage from './-private/ember-table-footer';
import EmberTableHeaderPage from './-private/ember-table-header';

/**
* Ember Table page object. Use this page object and its nested header/body object to retrieve table
Expand All @@ -25,6 +26,17 @@ export default PageObject.extend({
footer: EmberTableFooterPage,

rows: alias('body.rows'),
getCell: alias('body.getCell'),

headers: alias('header.columns'),
subheaders: alias('header.subcolumns'),

/**
* Returns the table width.
*/
get width() {
return findElement(this).offsetWidth;
},

/**
* Selects a row in the body
Expand Down
6 changes: 2 additions & 4 deletions addon/templates/components/ember-table-footer.hbs
Original file line number Diff line number Diff line change
@@ -1,28 +1,26 @@
{{#if isFixed}}
<div class="et-tf is-fixed" style={{fixedCellStyle}}>
{{#if column.footerComponent}}
{{#component column.footerComponent
{{component column.footerComponent
column=column
rowValue=rowValue
rowIndex=rowIndex
columnIndex=columnIndex
onFooterEvent="sendFooterEvent"
}}
{{/component}}
{{else}}
{{footerValue}}
{{/if}}
</div>
{{else}}
{{#if column.footerComponent}}
{{#component column.footerComponent
{{component column.footerComponent
column=column
rowValue=rowValue
rowIndex=rowIndex
columnIndex=columnIndex
onFooterEvent="sendFooterEvent"
}}
{{/component}}
{{else}}
{{footerValue}}
{{/if}}
Expand Down
13 changes: 12 additions & 1 deletion tests/dummy/app/components/custom-footer.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import Component from '@ember/component';
import { get } from '@ember/object';

import { computed } from 'ember-decorators/object';
import { classNames } from 'ember-decorators/component';
import { argument } from '@ember-decorators/argument';
import Component from '@ember/component';

@classNames('custom-footer')
export default class CustomFooter extends Component {
Expand All @@ -10,6 +13,14 @@ export default class CustomFooter extends Component {
@argument rowIndex;
@argument onFooterEvent;

@computed('column.valuePath', 'rowValue')
get footerValue() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do you need this footerValue for this custom component?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not needed for tests, but the template renders it and it wasn't there. I'd assumed it was meant to be and added it for future tests, because we'll likely want to verify that it works.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a duplication of footerValue in ember-table-footer. I think I put it there in the template but did not actually use it. We can pass footerValue=footerValue in ember-table-footer.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we should do that just to reduce code. Going to merge this, we need to keep moving.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's good to me. We can clean up this later. I did not mean to bikeshed on this.

let valuePath = this.get('column.valuePath');
let rowValue = this.get('rowValue');

return get(rowValue, valuePath);
}

click() {
this.sendAction('onFooterEvent', {
eventName: 'click',
Expand Down
55 changes: 43 additions & 12 deletions tests/helpers/generate-table.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const fullTable = hbs`
tableResizeMode=tableResizeMode
onSelect="onSelect"
onFooterEvent="onFooterEvent"
as |row|
}}
Expand All @@ -34,14 +35,14 @@ const fullTable = hbs`
</div>
`;

export function generateRows(rowCount, columnCount) {
export function generateRows(rowCount, columnCount, prefix = '') {
let arr = [];

for (let i = 0; i < rowCount; i++) {
let row = { 'id': `Row ${i}` };

for (let j = 0; j < columnCount; j++) {
row[toBase26(j)] = `${i}${toBase26(j)}`;
row[toBase26(j)] = `${prefix}${i}${toBase26(j)}`;
}

arr.push(row);
Expand All @@ -50,13 +51,18 @@ export function generateRows(rowCount, columnCount) {
return emberA(arr);
}

export function generateColumns(columnCount, columnOptions = {}) {
export function generateColumns(columnCount, {
subcolumnCount = 0,
columnOffset = 0,

...columnOptions
} = {}) {
let arr = [];

for (let i = 0; i < columnCount; i++) {
let columnDefinition = {
columnName: toBase26(i),
valuePath: toBase26(i),
valuePath: toBase26(columnOffset + i),
width: 100,
isResizable: true,
isReorderable: true
Expand All @@ -66,25 +72,36 @@ export function generateColumns(columnCount, columnOptions = {}) {
columnDefinition[property] = columnOptions[property];
}

if (subcolumnCount) {
columnDefinition.subcolumns = generateColumns(subcolumnCount, {
columnOffset: i,
...columnOptions
});
}

arr.push(columnDefinition);
}

return emberA(arr);
}

function defaultOnSelect(newRows) {
this.set('selectedRows', newRows);
}
const defaultActions = {
onSelect(newRows) {
this.set('selectedRows', newRows);
}
};

export default async function generateTable(testContext, {
columns,
rows,
footerRows,
columns,
rowCount = 10,
footerRowCount = 0,
columnCount = 10,
columnOptions,
hasCheckbox = false,

rowComponent = 'ember-table-row',
onSelect = defaultOnSelect,

...options
} = {}) {
Expand All @@ -94,16 +111,30 @@ export default async function generateTable(testContext, {

testContext.set('rowComponent', rowComponent);

columns = columns || generateColumns(columnCount);
rows = rows || generateRows(rowCount, columns.length);
columns = columns || generateColumns(columnCount, columnOptions);

// Total column length is columns + subcolumns
let totalColumns = columns.length + columns.reduce((v, c) => {
return c.subcolumns ? v + c.subcolumns.length : v;
}, 0);

rows = rows || generateRows(rowCount, totalColumns);
footerRows = footerRows || generateRows(footerRowCount, totalColumns);

// Set the checkbox value if it exists
columns[0].hasCheckbox = hasCheckbox;

testContext.set('columns', columns);
testContext.set('rows', rows);
testContext.set('footerRows', footerRows);

testContext.on('onSelect', onSelect.bind(testContext));
for (let action in defaultActions) {
let actions = testContext.actions || testContext._actions;

if (actions && !actions[action]) {
testContext.on(action, defaultActions[action].bind(testContext));
}
}

testContext.render(fullTable);

Expand Down
15 changes: 15 additions & 0 deletions tests/helpers/module.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { module, moduleForComponent } from 'ember-qunit';

export function scenarioModule(scenarios, callback) {
for (let scenario in scenarios) {
module(scenario, function(...moduleArgs) {
callback(scenarios[scenario], ...moduleArgs);
});
}
}

export function componentModule(moduleName, callback) {
moduleForComponent('ember-table', moduleName, { integration: true });

callback();
}
Loading