open-nomad/ui/tests/unit/serializers/recommendation-summary-test.js
2022-01-20 09:54:56 -05:00

218 lines
5.4 KiB
JavaScript

import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import RecommendationSummaryModel from 'nomad-ui/models/recommendation-summary';
module('Unit | Serializer | RecommendationSummary', function (hooks) {
setupTest(hooks);
hooks.beforeEach(function () {
this.store = this.owner.lookup('service:store');
this.subject = () => this.store.serializerFor('recommendation-summary');
});
const normalizationTestCases = [
{
name: 'Normal',
in: [
{
ID: '2345',
JobID: 'job-id',
Namespace: 'default',
Region: 'us-east-1',
Group: 'group-1',
Task: 'task-1',
Resource: 'MemoryMB',
Value: 500,
Current: 1000,
Stats: {
min: 25.0,
max: 575.0,
mean: 425.0,
media: 40.0,
},
SubmitTime: 1600000002000000000,
},
{
ID: '1234',
JobID: 'job-id',
Namespace: 'default',
Region: 'us-east-1',
Group: 'group-1',
Task: 'task-1',
Resource: 'CPU',
Value: 500,
Current: 1000,
Stats: {
min: 25.0,
max: 575.0,
mean: 425.0,
media: 40.0,
},
SubmitTime: 1600000001000000000,
},
{
ID: '6789',
JobID: 'other-job-id',
Namespace: 'other',
Region: 'us-east-1',
Group: 'group-2',
Task: 'task-2',
Resource: 'MemoryMB',
Value: 500,
Current: 1000,
Stats: {
min: 25.0,
max: 575.0,
mean: 425.0,
media: 40.0,
},
SubmitTime: 1600000003000000000,
},
],
out: {
data: [
{
attributes: {
jobId: 'job-id',
jobNamespace: 'default',
submitTime: new Date(1600000002000),
taskGroupName: 'group-1',
},
id: '1234-2345',
relationships: {
job: {
data: {
id: '["job-id","default"]',
type: 'job',
},
},
recommendations: {
data: [
{
id: '2345',
type: 'recommendation',
},
{
id: '1234',
type: 'recommendation',
},
],
},
},
type: 'recommendation-summary',
},
{
attributes: {
jobId: 'other-job-id',
jobNamespace: 'other',
submitTime: new Date(1600000003000),
taskGroupName: 'group-2',
},
id: '6789',
relationships: {
job: {
data: {
id: '["other-job-id","other"]',
type: 'job',
},
},
recommendations: {
data: [
{
id: '6789',
type: 'recommendation',
},
],
},
},
type: 'recommendation-summary',
},
],
included: [
{
attributes: {
resource: 'MemoryMB',
stats: {
max: 575,
mean: 425,
media: 40,
min: 25,
},
submitTime: new Date(1600000002000),
taskName: 'task-1',
value: 500,
},
id: '2345',
relationships: {
job: {
links: {
related: '/v1/job/job-id',
},
},
},
type: 'recommendation',
},
{
attributes: {
resource: 'CPU',
stats: {
max: 575,
mean: 425,
media: 40,
min: 25,
},
submitTime: new Date(1600000001000),
taskName: 'task-1',
value: 500,
},
id: '1234',
relationships: {
job: {
links: {
related: '/v1/job/job-id',
},
},
},
type: 'recommendation',
},
{
attributes: {
resource: 'MemoryMB',
stats: {
max: 575,
mean: 425,
media: 40,
min: 25,
},
submitTime: new Date(1600000003000),
taskName: 'task-2',
value: 500,
},
id: '6789',
relationships: {
job: {
links: {
related: '/v1/job/other-job-id?namespace=other',
},
},
},
type: 'recommendation',
},
],
},
},
];
normalizationTestCases.forEach((testCase) => {
test(`normalization: ${testCase.name}`, async function (assert) {
assert.deepEqual(
this.subject().normalizeArrayResponse(
this.store,
RecommendationSummaryModel,
testCase.in
),
testCase.out
);
});
});
});