Files
n8n-enterprise-unlocked/packages/nodes-base/nodes/Beeminder/test/Beeminder.node.test.ts

125 lines
3.3 KiB
TypeScript

import { NodeTestHarness } from '@nodes-testing/node-test-harness';
import type { WorkflowTestData } from 'n8n-workflow';
import nock from 'nock';
const userInfo = {
username: 'test',
timezone: 'Europe/Zurich',
goals: ['test3333', 'test333'],
created_at: 1520089425,
updated_at: 1753992556,
urgency_load: 43,
deadbeat: false,
has_authorized_fitbit: false,
default_leadtime: 0,
default_alertstart: 34200,
default_deadline: -43260,
subscription: 'infinibee',
subs_downto: 'infinibee',
subs_freq: 24,
subs_lifetime: null,
remaining_subs_credit: 31,
id: '35555555555',
};
const chargeInfo = {
amount: 10,
id: {
$oid: '688bcd7cf0168a11bee246ffff',
},
note: 'Created by test-test-oauth2',
status: null,
username: 'test',
};
const goalInfo = {
slug: 'test3333',
title: 'test title',
description: null,
goalval: 1000,
rate: 1,
rah: null,
callback_url: null,
tags: [],
recent_data: [
{
id: '688bc5fef0168a11bee24691',
timestamp: 1754042339,
daystamp: '20250801',
value: 0,
comment: 'initial datapoint of 0 on the 1st',
updated_at: 1753990654,
requestid: null,
origin: 'nihilo',
creator: '',
is_dummy: false,
is_initial: true,
urtext: null,
fulltext: '2025-Aug-01 entered at 21:37 on 2025-Jul-31 ex nihilo',
canonical: '01 0 "initial datapoint of 0 on the 1st"',
created_at: '2025-07-31T19:37:34.000Z',
},
],
dueby: null,
};
const newDatapoint = {
id: '688bc54ef0168a11bee2468b',
timestamp: 1753990478,
daystamp: '20250801',
value: 1,
comment: '',
updated_at: 1753990478,
requestid: null,
origin: 'test-test-oauth2',
creator: 'testuser',
is_dummy: false,
is_initial: false,
urtext: null,
fulltext: '2025-Aug-01 entered at 21:34 on 2025-Jul-31 by test-ser via test-test-oauth2',
canonical: '01 1',
created_at: '2025-07-31T19:34:38.000Z',
status: 'created',
};
describe('Execute Beeminder Node', () => {
const testHarness = new NodeTestHarness();
beforeEach(() => {
const beeminderNock = nock('https://www.beeminder.com');
beeminderNock.get('/api/v1/users/me.json').reply(200, userInfo);
beeminderNock.post('/api/v1/charges.json').reply(200, chargeInfo);
beeminderNock.get('/api/v1/users/me/goals.json').reply(200, [goalInfo]);
beeminderNock.post('/api/v1/users/me/goals.json').reply(200, goalInfo);
beeminderNock
.post(`/api/v1/users/me/goals/${goalInfo.slug}/datapoints.json`)
.reply(200, newDatapoint);
beeminderNock
.put(`/api/v1/users/me/goals/${goalInfo.slug}/datapoints/${newDatapoint.id}.json`)
.reply(200, newDatapoint);
beeminderNock
.delete(`/api/v1/users/me/goals/${goalInfo.slug}/datapoints/${newDatapoint.id}.json`)
.reply(200, newDatapoint);
});
const testData: WorkflowTestData = {
description: 'Execute operations',
input: {
workflowData: testHarness.readWorkflowJSON('workflow.json'),
},
output: {
nodeData: {
'Get user information': [[{ json: userInfo }]],
'Create a charge': [[{ json: chargeInfo }]],
'Get many goals': [[{ json: goalInfo }]],
'Create a new goal': [[{ json: goalInfo }]],
'Create datapoint for goal': [[{ json: newDatapoint }]],
'Update a datapoint': [[{ json: newDatapoint }]],
'Delete a datapoint': [[{ json: newDatapoint }]],
},
},
};
testHarness.setupTest(testData, { credentials: { beeminderApi: {} } });
});