Skip to content

Commit 050e846

Browse files
1 parent 59d2da4 commit 050e846

File tree

5 files changed

+98
-0
lines changed

5 files changed

+98
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { get, has } from 'lodash';
2+
3+
import ActivityInteractionType from '../../../../models/ActivityInteractionType';
4+
import Statement from '../../../../models/Statement';
5+
6+
export const getLikertMetadata = (statement: Statement)
7+
: {readonly [key: string]: any} => {
8+
if (
9+
!(
10+
get(
11+
statement.object,
12+
['definition', 'interactionType'],
13+
) === ActivityInteractionType.LIKERT
14+
&& has(statement, ['result', 'response'])
15+
)
16+
) {
17+
return {};
18+
}
19+
20+
return {
21+
'https://learninglocker&46;net/likert-response': get(statement, ['result', 'response']),
22+
};
23+
};

src/apps/statements/service/storeStatements/queriables/getMetadataFromStatement/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ import Statement from '../../../../models/Statement';
22
import { getBooleanMetadata } from './getBooleanMetadata';
33
import { getChoiceQuestionMetadata } from './getChoiceQuestionMetadata';
44
import { getDurationMetadata } from './getDurationMetadata';
5+
import { getLikertMetadata } from './getLikertMetadata';
56
import { getMatchingQuestionsMetadata } from './getMatchingQuestionsMetadata';
67
import { getSequencingMetadata } from './getSequencingMetadata';
78

89
export default (statement: Statement): { readonly [key: string]: any } => {
10+
const likertMetadata = getLikertMetadata(statement);
911
const durationMetadata = getDurationMetadata(statement);
1012
const sequencingMetadata = getSequencingMetadata(statement);
1113
const choicesMetadata = getChoiceQuestionMetadata(statement);
@@ -18,5 +20,6 @@ export default (statement: Statement): { readonly [key: string]: any } => {
1820
...choicesMetadata,
1921
...matchingMetadata,
2022
...booleanMetadata,
23+
...likertMetadata,
2124
};
2225
};
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import ActivityInteractionType from '../../../../../models/ActivityInteractionType';
2+
import InteractionActivityDefinition from '../../../../../models/InteractionActivityDefinition';
3+
import Statement from '../../../../../models/Statement';
4+
import SubStatementObject from '../../../../../models/SubStatementObject';
5+
import { statementDefaults } from './statements.fixture';
6+
7+
const likertStatement: Statement = {
8+
...statementDefaults,
9+
...{
10+
result: {
11+
response: 'likert_3',
12+
},
13+
object: {
14+
definition: {
15+
name: {'en-US': 'Question 3'},
16+
description: {'en-US': 'How awesome is xAPI?'},
17+
scale: [
18+
{id: 'likert_0', description: {'en-US': 'It’s OK'}},
19+
{id: 'likert_1', description: {'en-US': 'It’s Pretty Cool'}},
20+
{id: 'likert_2', description: {'en-US': 'It’s Damn Cool'}},
21+
{id: 'likert_3', description: {'en-US': 'It’s Gonna Change the World'}},
22+
],
23+
type: 'http://adlnet.gov/expapi/activities/cmi.interaction',
24+
interactionType: ActivityInteractionType.LIKERT,
25+
correctResponsesPattern: ['likert_3'],
26+
} as Partial<InteractionActivityDefinition>,
27+
} as SubStatementObject,
28+
} as Partial<Statement>,
29+
};
30+
31+
export {
32+
likertStatement,
33+
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import * as assert from 'assert';
2+
3+
import { getLikertMetadata } from '../../../../service/storeStatements/queriables/getMetadataFromStatement/getLikertMetadata';
4+
import { likertStatement } from './fixtures/likert.fixture';
5+
6+
describe('Retrieve likert metadata from statement', () => {
7+
it('should return empty metadata from empty result', () => {
8+
const expectedEmptyMetadata = {};
9+
const actualEmptyMetadataFromEmptyResult = getLikertMetadata(
10+
{
11+
...likertStatement,
12+
...{
13+
result: {},
14+
},
15+
},
16+
);
17+
18+
assert.deepEqual(actualEmptyMetadataFromEmptyResult, expectedEmptyMetadata);
19+
});
20+
21+
it('should retrieve metadata when likert is provided in the result', () => {
22+
const actualCorrectMetadata = getLikertMetadata(likertStatement);
23+
const expectedCorrectMetadata = {
24+
'https://learninglocker&46;net/likert-response': 'likert_3',
25+
};
26+
27+
assert.deepEqual(actualCorrectMetadata, expectedCorrectMetadata);
28+
});
29+
});

src/apps/statements/tests/storingStatements/queriables/getMetadataFromStatement/getMetadataFromStatement.test.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { merge } from 'lodash';
44
import getMetadataFromStatement
55
from '../../../../service/storeStatements/queriables/getMetadataFromStatement';
66
import { multipleChoices } from './fixtures/choice-interaction.fixture';
7+
import { likertStatement } from './fixtures/likert.fixture';
78
import { multipleMatchingQuestions } from './fixtures/matching-interaction.fixture';
89
import {
910
sequencingInteractionActivityStatement,
@@ -50,6 +51,15 @@ describe('Retrieve metadata from statement', () => {
5051
assert.deepEqual(actualMetadata, expectedMetadata);
5152
});
5253

54+
it('should retrieve likert metadata from statement', () => {
55+
const actualLikertMetadata = getMetadataFromStatement(likertStatement);
56+
const expectedLikertMetadata = {
57+
'https://learninglocker&46;net/likert-response': 'likert_3',
58+
};
59+
60+
assert.deepEqual(actualLikertMetadata, expectedLikertMetadata);
61+
});
62+
5363
it('should return choices metadata from statement', () => {
5464
const actualMetadata = getMetadataFromStatement(
5565
{

0 commit comments

Comments
 (0)