diff --git a/src/calls/activity/__tests__/activity.test.ts b/src/calls/activity/__tests__/activity.test.ts index ea2d1b0..540fc18 100644 --- a/src/calls/activity/__tests__/activity.test.ts +++ b/src/calls/activity/__tests__/activity.test.ts @@ -163,4 +163,74 @@ Array [ ] `); }); + + it('should accept null activityType from API', async () => { + nock(baseUrl, { encodedQueryParams: true }) + .get('/v2/activity') + .reply(200, { + fullResultSize: 3, + from: 0, + count: 3, + versionDigest: "'If-None-Match' header not specified", + values: [ + { + id: 5029897, + version: 0, + name: 'Reise', + number: '1', + description: '', + activityType: null, + isProjectActivity: true, + isGeneral: false, + isTask: true, + isDisabled: false, + isChargeable: false, + rate: 0, + costPercentage: 0, + displayName: '1 Reise', + }, + { + id: 5029898, + version: 0, + name: 'Gjennomforing', + number: '2', + description: '', + activityType: 'TASK', + isProjectActivity: false, + isGeneral: false, + isTask: true, + isDisabled: false, + isChargeable: false, + rate: 0, + costPercentage: 0, + displayName: '2 Gjennomforing', + }, + { + id: 5029901, + version: 0, + name: 'Gjennomforing', + number: '4', + description: '', + activityType: null, + isProjectActivity: true, + isGeneral: false, + isTask: true, + isDisabled: false, + isChargeable: false, + rate: 0, + costPercentage: 0, + displayName: '4 Gjennomforing', + }, + ], + }); + + const activities = await client.list({}); + parseRuntypeValidationError(activities.error); + invariant(activities.success); + expect(activities.body.values.map(v => v.activityType)).toEqual([ + null, + 'TASK', + null, + ]); + }); }); diff --git a/src/calls/activity/models/activity.ts b/src/calls/activity/models/activity.ts index d6185bb..f44c3a1 100644 --- a/src/calls/activity/models/activity.ts +++ b/src/calls/activity/models/activity.ts @@ -6,12 +6,14 @@ const activityRt = rt.Record({ name: rt.String, number: rt.String, description: rt.String, - activityType: rt.Union( - rt.Literal('GENERAL_ACTIVITY'), - rt.Literal('PROJECT_GENERAL_ACTIVITY'), - rt.Literal('PROJECT_SPECIFIC_ACTIVITY'), - rt.Literal('TASK'), - ), + activityType: rt + .Union( + rt.Literal('GENERAL_ACTIVITY'), + rt.Literal('PROJECT_GENERAL_ACTIVITY'), + rt.Literal('PROJECT_SPECIFIC_ACTIVITY'), + rt.Literal('TASK'), + ) + .nullable(), isProjectActivity: rt.Boolean, isGeneral: rt.Boolean, isTask: rt.Boolean,