wiki.techinc.nl/tests/api-testing/REST/ContributionsCount.js
Nikki Nikkhoui 3ba476102d /contributions/user/{user}/count
REST Endpoint for getting the number of contributions for a given
user (not yourself).

Change-Id: Ib3bfedcec0aa1af1983cec0a7bda28fc49ddc673
2020-07-28 18:36:41 +00:00

162 lines
5.1 KiB
JavaScript

'use strict';
const { REST, assert, action, utils, clientFactory } = require( 'api-testing' );
describe( 'GET /contributions/count', () => {
const basePath = 'rest.php/coredev/v0';
let arnold, beth;
let arnoldAction, bethAction, samAction;
let editToDelete;
before( async () => {
// Sam will be the same Sam for all tests, even in other files
samAction = await action.user( 'Sam', [ 'suppress' ] );
// Arnold will be a different Arnold every time
arnoldAction = await action.getAnon();
await arnoldAction.account( 'Arnold_' );
// Beth will be a different Beth every time
bethAction = await action.getAnon();
await bethAction.account( 'Beth_' );
arnold = clientFactory.getRESTClient( basePath, arnoldAction );
beth = clientFactory.getRESTClient( basePath, bethAction );
const oddEditsPage = utils.title( 'UserContribution_' );
const evenEditsPage = utils.title( 'UserContribution_' );
// Create a tag.
await action.makeTag( 'api-test' );
// bob makes 1 edit
const bobAction = await action.bob();
await bobAction.edit( evenEditsPage, [ { summary: 'Bob made revision 1' } ] );
// arnold makes 2 edits. 1 with a tag, 1 without.
const tags = 'api-test';
await arnoldAction.edit( oddEditsPage, { tags } );
await utils.sleep();
await arnoldAction.edit( evenEditsPage, {} );
const pageDeleteRevs = utils.title( 'UserContribution_' );
editToDelete = await bethAction.edit( pageDeleteRevs, [ { text: 'Beth edit 1' } ] );
await bethAction.edit( pageDeleteRevs, [ { text: 'Beth edit 2' } ] );
} );
const testGetContributionsCount = async ( client, endpoint ) => {
const { status, body } = await client.get( endpoint );
assert.equal( status, 200 );
assert.property( body, 'count' );
const { count } = body;
assert.deepEqual( count, 2 );
};
const testGetContributionsCountByTag = async ( client, endpoint ) => {
const { status, body } = await client.get( endpoint, { tag: 'api-test' } );
assert.equal( status, 200 );
const { count } = body;
assert.deepEqual( count, 1 );
};
const testSuppressedContributions = async ( client, endpoint ) => {
const { body: body } = await client.get( endpoint );
assert.deepEqual( body.count, 2 );
await samAction.action( 'revisiondelete',
{
type: 'revision',
token: await samAction.token(),
target: editToDelete.title,
hide: 'content|comment|user',
ids: editToDelete.newrevid
},
'POST'
);
// Users w/o appropriate permissions should not have suppressed revisions included in count
const { body: suppressedRevBody } = await client.get( endpoint );
assert.deepEqual( suppressedRevBody.count, 1 );
await samAction.action( 'revisiondelete',
{
type: 'revision',
token: await samAction.token(),
target: editToDelete.title,
show: 'content|comment|user',
ids: editToDelete.newrevid
},
'POST'
);
const { body: unsuppressedRevBody } = await client.get( endpoint );
assert.deepEqual( unsuppressedRevBody.count, 2 );
};
describe( 'GET /me/contributions/count', () => {
const endpoint = '/me/contributions/count';
it( 'Returns status 404 for anon', async () => {
const anon = new REST( basePath );
const response = await anon.get( endpoint );
assert.equal( response.status, 401 );
assert.nestedProperty( response.body, 'messageTranslations' );
} );
it( 'Returns status OK', async () => {
const response = await arnold.get( endpoint );
assert.equal( response.status, 200 );
} );
it( 'Returns a list of another user\'s edits', async () => {
await testGetContributionsCount( arnold, endpoint );
} );
it( 'Returns edits filtered by tag', async () => {
await testGetContributionsCountByTag( arnold, endpoint );
} );
it( 'Does not return suppressed contributions when requesting user does not have appropriate permissions', async () => {
// Note that the suppressed contributions are Beth's contributions.
await testSuppressedContributions( beth, endpoint );
} );
} );
describe( 'GET /user/{user}/contributions/count', () => {
let endpoint;
before( () => {
endpoint = `/user/${arnold.username}/contributions/count`;
} );
it( 'Returns status 404 for unknown user', async () => {
const anon = new REST( basePath );
const unknownUser = `Unknown ${utils.uniq()}`;
const response = await anon.get( `/user/${unknownUser}/contributions/count` );
assert.equal( response.status, 404 );
assert.nestedProperty( response.body, 'messageTranslations' );
} );
it( 'Returns status OK', async () => {
const response = await arnold.get( endpoint );
assert.equal( response.status, 200 );
} );
it( 'Returns a list of another user\'s edits', async () => {
await testGetContributionsCount( beth, endpoint );
} );
it( 'Returns edits filtered by tag', async () => {
await testGetContributionsCountByTag( beth, endpoint );
} );
it( 'Does not return suppressed contributions when requesting user does not have appropriate permissions', async () => {
// Note that the suppressed contributions are Beth's contributions.
const bethsEndpoint = `/user/${beth.username}/contributions/count`;
await testSuppressedContributions( arnold, bethsEndpoint );
} );
} );
} );