mediawiki-extensions-Echo/tests/qunit/model/test_mw.echo.dm.PaginationModel.js

83 lines
2.4 KiB
JavaScript
Raw Normal View History

QUnit.module( 'ext.echo.dm - PaginationModel' );
QUnit.test.each( 'Constructing the model', {
'Empty config': {
config: {},
expected: {}
},
'Overriding defaults': {
config: {
pageNext: 'continueValNext|123',
itemsPerPage: 10
},
expected: {
getNextPageContinue: 'continueValNext|123',
hasNextPage: true,
getItemsPerPage: 10,
getCurrentPageItemCount: 10
}
}
}, ( assert, data ) => {
const defaultValues = {
getPageContinue: undefined,
getCurrPageIndex: 0,
getPrevPageContinue: '',
getCurrPageContinue: '',
getNextPageContinue: '',
hasPrevPage: false,
hasNextPage: false,
getCurrentPageItemCount: 25,
getItemsPerPage: 25
};
const expected = $.extend( true, {}, defaultValues, data.expected );
const model = new mw.echo.dm.PaginationModel( data.config );
for ( const method in expected ) {
assert.deepEqual(
// Run the method
model[ method ](),
// Expected value
expected[ method ],
// Message
method
);
}
} );
QUnit.test( 'Emitting update event', ( assert ) => {
const results = [];
const model = new mw.echo.dm.PaginationModel();
// Listen to update event
model.on( 'update', () => {
results.push( [
model.getCurrPageIndex(),
model.hasNextPage()
] );
} );
// Trigger events
// Set up initial pages (first page is 0)
model.setPageContinue( 1, 'page2|2' ); // [ [ 0, true ] ]
model.setPageContinue( 2, 'page3|3' ); // [ [ 0, true ], [ 0, true ] ]
model.setPageContinue( 3, 'page4|4' ); // [ [ 0, true ], [ 0, true ], [ 0, true ] ]
model.forwards(); // [ [ 0, true ], [ 0, true ], [ 0, true ], [ 1, true ] ]
model.forwards(); // [ [ 0, true ], [ 0, true ], [ 0, true ], [ 1, true ], [ 2, true ] ]
model.forwards(); // [ [ 0, true ], [ 0, true ], [ 0, true ], [ 1, true ], [ 2, true ], [ 3, false ] ]
model.backwards(); // [ [ 0, true ], [ 0, true ], [ 0, true ], [ 1, true ], [ 2, true ], [ 3, false ], [ 2, true ] ]
model.setCurrentPageItemCount(); // [ [ 0, true ], [ 0, true ], [ 0, true ], [ 1, true ], [ 2, true ], [ 3, false ], [ 2, true ], [ 2, true ] ]
model.reset(); // [ [ 0, true ], [ 0, true ], [ 0, true ], [ 1, true ], [ 2, true ], [ 3, false ], [ 2, true ], [ 2, true ], [ 0, false ] ]
assert.deepEqual(
// Actual
results,
// Expected:
[ [ 0, true ], [ 0, true ], [ 0, true ], [ 1, true ], [ 2, true ], [ 3, false ], [ 2, true ], [ 2, true ], [ 0, false ] ],
// Message
'Update events emitted'
);
} );