test/unit/helpers.badge.js
import test from 'ava';
import sinon from 'sinon';
import {
client,
Badge,
} from '../../src';
// See tests.js for testing client creation
const badgeJsonApi = {
id: 15,
type: 'badges',
attributes: {
created_at: '2017-08-09T17:26:59Z',
updated_at: '2017-08-09T17:26:59Z',
title: 'dummy_1082',
description: 'Demo Content info...',
redemption_points: 250,
image: {
url: '/uploads/test/reward/image/15/1.png',
small: {
url: '/uploads/test/reward/image/15/small_1.png'
},
small_hd: {
url: '/uploads/test/reward/image/15/small_hd_1.png'
},
fullscreen: {
url: '/uploads/test/reward/image/15/fullscreen_1.png'
},
main: {
url: '/uploads/test/reward/image/15/main_1.png'
},
fullscreen_hd: {
url: '/uploads/test/reward/image/15/fullscreen_hd_1.png'
},
main_hd: {
url: '/uploads/test/reward/image/15/main_hd_1.png'
}
},
position: 4,
enabled: true,
featured: null,
based_on: null,
threshold: null,
time_unit: null,
start_point: null,
start_at: null,
disabled_image: {
url: '/default/default.png',
small: {
url: '/default/small_default.png'
},
small_hd: {
url: '/default/small_hd_default.png'
},
fullscreen: {
url: '/default/fullscreen_default.png'
},
main: {
url: '/default/main_default.png'
},
fullscreen_hd: {
url: '/default/fullscreen_hd_default.png'
},
main_hd: {
url: '/default/main_hd_default.png'
}
},
cache_token: 'fOjCfFKZhjE'
}
};
const badgeJson = {
id: 15,
type: 'badges',
created_at: '2017-08-09T17:26:59Z',
updated_at: '2017-08-09T17:26:59Z',
title: 'dummy_1082',
description: 'Demo Content info...',
redemption_points: 250,
image: {
url: '/uploads/test/reward/image/15/1.png',
small: {
url: '/uploads/test/reward/image/15/small_1.png'
},
small_hd: {
url: '/uploads/test/reward/image/15/small_hd_1.png'
},
fullscreen: {
url: '/uploads/test/reward/image/15/fullscreen_1.png'
},
main: {
url: '/uploads/test/reward/image/15/main_1.png'
},
fullscreen_hd: {
url: '/uploads/test/reward/image/15/fullscreen_hd_1.png'
},
main_hd: {
url: '/uploads/test/reward/image/15/main_hd_1.png'
}
},
position: 4,
enabled: true,
featured: null,
based_on: null,
threshold: null,
time_unit: null,
start_point: null,
start_at: null,
disabled_image: {
url: '/default/default.png',
small: {
url: '/default/small_default.png'
},
small_hd: {
url: '/default/small_hd_default.png'
},
fullscreen: {
url: '/default/fullscreen_default.png'
},
main: {
url: '/default/main_default.png'
},
fullscreen_hd: {
url: '/default/fullscreen_hd_default.png'
},
main_hd: {
url: '/default/main_hd_default.png'
}
},
cache_token: 'fOjCfFKZhjE'
};
test.before('start server', () => {
client.apiBaseUrl = 'https://somesite.Clinical6.com';
client.authToken = 'valid_token';
});
test.beforeEach((t) => {
client.cache = 'never';
client.authToken = 'valid_token';
t.context.server = sinon.fakeServer.create();
t.context.server.autoRespond = true;
t.context.server.respondWith('DELETE', `${client.apiBaseUrl}/v3/badges/*`,
[200, { 'Content-Type': 'application/json' }, JSON.stringify({ status: 'ok' })]);
t.context.server.respondWith('PATCH', `${client.apiBaseUrl}/v3/badges/*`,
[200, { 'Content-Type': 'application/json' }, JSON.stringify({
data: {
id: '4',
type: 'badges',
attributes: {
created_at: '2017-08-09T17:26:59Z',
updated_at: '2017-08-09T17:26:59Z',
title: 'dummy_1065',
description: 'Demo Content info...',
redemption_points: 250,
image: {
url: '/uploads/test/reward/image/4/1.png',
small: {
url: '/uploads/test/reward/image/4/small_1.png'
},
small_hd: {
url: '/uploads/test/reward/image/4/small_hd_1.png'
},
fullscreen: {
url: '/uploads/test/reward/image/4/fullscreen_1.png'
},
main: {
url: '/uploads/test/reward/image/4/main_1.png'
},
fullscreen_hd: {
url: '/uploads/test/reward/image/4/fullscreen_hd_1.png'
},
main_hd: {
url: '/uploads/test/reward/image/4/main_hd_1.png'
}
},
position: 4,
enabled: true,
featured: null,
based_on: null,
threshold: null,
time_unit: null,
start_point: null,
start_at: null,
disabled_image: {
url: '/default/default.png',
small: {
url: '/default/small_default.png'
},
small_hd: {
url: '/default/small_hd_default.png'
},
fullscreen: {
url: '/default/fullscreen_default.png'
},
main: {
url: '/default/main_default.png'
},
fullscreen_hd: {
url: '/default/fullscreen_hd_default.png'
},
main_hd: {
url: '/default/main_hd_default.png'
}
},
cache_token: 'iP78O8Ag65c'
}
}
})]);
t.context.server.respondWith('POST', `${client.apiBaseUrl}/v3/badges`,
[201, { 'Content-Type': 'application/json' }, JSON.stringify({
data: {
id: '16',
type: 'badges',
attributes: {
created_at: '2017-08-09T16:23:56Z',
updated_at: '2017-08-09T16:23:56Z',
title: 'dummy_459',
description: 'Demo Content info...',
redemption_points: 250,
image: {
url: '/default/default.png',
small: {
url: '/default/small_default.png'
},
small_hd: {
url: '/default/small_hd_default.png'
},
fullscreen: {
url: '/default/fullscreen_default.png'
},
main: {
url: '/default/main_default.png'
},
fullscreen_hd: {
url: '/default/fullscreen_hd_default.png'
},
main_hd: {
url: '/default/main_hd_default.png'
}
},
position: 4,
enabled: true,
featured: null,
based_on: null,
threshold: null,
time_unit: null,
start_point: null,
start_at: null,
disabled_image: {
url: '/default/default.png',
small: {
url: '/default/small_default.png'
},
small_hd: {
url: '/default/small_hd_default.png'
},
fullscreen: {
url: '/default/fullscreen_default.png'
},
main: {
url: '/default/main_default.png'
},
fullscreen_hd: {
url: '/default/fullscreen_hd_default.png'
},
main_hd: {
url: '/default/main_hd_default.png'
}
},
cache_token: '3F2Lr5caMIQ'
}
}
})]);
t.context.storage = client.storageUtility;
client.badge = new Badge({});
t.context.badgeJsonApi = {
data: {
type: 'badges',
attributes: {
title: 'dummy_1065',
description: 'Demo Content info...',
redemption_points: 250
}
}
};
t.context.badge = new Badge(t.context.badgeJsonApi);
});
test.afterEach(t => t.context.server.restore());
/**
* @test {Badge}
*/
test('[unit] Badge should handle badge data with a normal json format', (t) => {
const badge = new Badge(badgeJson);
t.is(badge.id, 15);
t.is(badge.type, 'badges');
t.is(badge.createdAt, '2017-08-09T17:26:59Z');
t.is(badge.updatedAt, '2017-08-09T17:26:59Z');
t.is(badge.title, 'dummy_1082');
t.is(badge.description, 'Demo Content info...');
t.is(badge.redemptionPoints, 250);
t.is(badge.image.url, '/uploads/test/reward/image/15/1.png');
t.is(badge.position, 4);
t.is(badge.enabled, true);
t.is(badge.featured, null);
t.is(badge.basedOn, null);
t.is(badge.threshold, null);
t.is(badge.timeUnit, null);
t.is(badge.startPoint, null);
t.is(badge.startAt, null);
t.is(badge.disabledImage.url, '/default/default.png');
t.is(badge.cacheToken, 'fOjCfFKZhjE');
});
/**
* @test {Badge}
*/
test('[unit] Badge should handle badge data with json api format', (t) => {
const badge = new Badge({ data: badgeJsonApi });
t.is(badge.id, 15);
t.is(badge.type, 'badges');
t.is(badge.createdAt, '2017-08-09T17:26:59Z');
t.is(badge.updatedAt, '2017-08-09T17:26:59Z');
t.is(badge.title, 'dummy_1082');
t.is(badge.description, 'Demo Content info...');
t.is(badge.redemptionPoints, 250);
t.is(badge.image.url, '/uploads/test/reward/image/15/1.png');
t.is(badge.position, 4);
t.is(badge.enabled, true);
t.is(badge.featured, null);
t.is(badge.basedOn, null);
t.is(badge.threshold, null);
t.is(badge.timeUnit, null);
t.is(badge.startPoint, null);
t.is(badge.startAt, null);
t.is(badge.disabledImage.url, '/default/default.png');
t.is(badge.cacheToken, 'fOjCfFKZhjE');
});
/**
* @test {Badge}
*/
test('[unit] Badge should generate json api format when converted to string', (t) => {
let badge = new Badge({ data: badgeJsonApi });
t.deepEqual(badge.toJSON(), badgeJsonApi);
badge = new Badge({ data: badgeJsonApi });
t.deepEqual(badge.toJSON(), badgeJsonApi);
});
/**
* @test {Badge.delete}
*/
test('[unit] Badge.delete should successfully delete a badge', async (t) => {
const badge = new Badge({ data: badgeJsonApi });
const response = await badge.delete();
// const request = t.context.server.requests[0];
// t.is(request.method, 'DELETE');
// t.is(request.url, `${client.apiBaseUrl}/v3/badges/${badge.id}`);
// t.is(request.requestHeaders.Accept, 'application/json');
// t.is(request.requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// t.is(request.requestHeaders.Authorization, 'Token token=valid_token');
t.truthy(response);
});
/**
* @test {Badge.save}
*/
test('[unit] Badge.save should successfully insert a badge with a badge object when id does not exist', async (t) => {
const json = JSON.parse(JSON.stringify(badgeJsonApi));
delete json.id;
const badge = new Badge({ data: json });
const response = await badge.save();
// const request = t.context.server.requests[0];
// t.is(request.method, 'POST');
// t.is(request.url, `${client.apiBaseUrl}/v3/badges`);
// t.is(request.requestHeaders.Accept, 'application/json');
// t.deepEqual(JSON.parse(request.requestBody), { data: json });
// t.is(request.requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// t.is(request.requestHeaders.Authorization, 'Token token=valid_token');
t.is(response.id, 16);
t.is(response.type, 'badges');
});
/**
* @test {Badge.save}
*/
test('[unit] Badge.save should successfully update a badge with a badge object when id exists', async (t) => {
const badge = new Badge({ data: badgeJsonApi });
const response = await badge.save();
// const request = t.context.server.requests[0];
// t.is(request.method, 'PATCH');
// t.is(request.url, `${client.apiBaseUrl}/v3/badges/${badge.id}`);
// t.is(request.requestHeaders.Accept, 'application/json');
// t.deepEqual(JSON.parse(request.requestBody), { data: badgeJsonApi });
// t.is(request.requestHeaders['Content-Type'], 'application/json;charset=utf-8');
// t.is(request.requestHeaders.Authorization, 'Token token=valid_token');
t.is(response.id, 4);
t.is(response.type, 'badges');
});