Skip to content

Commit 4efee7c

Browse files
authored
Add tests (#45)
* add worker main tests * add manage test * fix timezone warnings * add WorkflowDetailForm tests
1 parent 0130d4f commit 4efee7c

File tree

4 files changed

+57
-2
lines changed

4 files changed

+57
-2
lines changed

frontend/src/tests/WorkflowDetailForm.test.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import ReactTestRenderer from 'react-test-renderer';
33

44
import WorkflowDetailForm from '../WorkflowDetailForm';
55
import {mockAPI} from './mocks'
6+
import API from "../API";
67

78
it('WorkflowDetailForm editable', () => {
89
mockAPI([{versions: [1]}]);
@@ -21,3 +22,46 @@ it('WorkflowDetailForm editable', () => {
2122
let tree = component.toJSON();
2223
expect(tree).toMatchSnapshot();
2324
});
25+
26+
it('WorkflowDetailForm componentWillReceiveProps', () => {
27+
mockAPI([{versions: []}]);
28+
const workflow = {
29+
"id": 1,
30+
"name": "Simple Workflow Example",
31+
"name_id": 1,
32+
"version": 1,
33+
"schedule_active": false,
34+
"schedule": null,
35+
"next_run": null,
36+
"parameters": {"MY_OBJECT_ID": "1", "SOME_SETTING": "false"}
37+
};
38+
const component = ReactTestRenderer.create(<WorkflowDetailForm workflow={workflow}/>);
39+
const instance = component.getInstance();
40+
instance.setState = jest.fn();
41+
// same but different object
42+
instance.componentWillReceiveProps({workflow: {...workflow}});
43+
expect(instance.setState.mock.calls[0][0].parameters).toEqual('MY_OBJECT_ID=1\nSOME_SETTING=false');
44+
});
45+
46+
it('WorkflowDetailForm submit', () => {
47+
mockAPI([{versions: []}]);
48+
const workflow = {
49+
"id": 1,
50+
"name": "Simple Workflow Example",
51+
"name_id": 1,
52+
"version": 1,
53+
"schedule_active": false,
54+
"schedule": null,
55+
"next_run": null,
56+
"parameters": {"MY_OBJECT_ID": "1", "SOME_SETTING": "false"}
57+
};
58+
const component = ReactTestRenderer.create(<WorkflowDetailForm workflow={workflow}/>);
59+
const instance = component.getInstance();
60+
instance.toggleEditable();
61+
const event = {preventDefault: jest.fn()};
62+
API.patch = jest.fn();
63+
instance.handleSubmit(event);
64+
expect(event.preventDefault).toBeCalled();
65+
// this does a roundtrip through formValues:
66+
expect(API.patch.mock.calls[0][1].parameters).toEqual(workflow.parameters);
67+
});
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from unittest import mock
2+
3+
from yawn import manage
4+
5+
6+
@mock.patch.object(manage, 'execute_from_command_line')
7+
def test_manage(mock_execute):
8+
manage.main()
9+
assert mock_execute.called

yawn/utilities/cron.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ def next_run(self, current_time: datetime.datetime) -> datetime.datetime:
3333
# if next run is next day, get smallest hour, smallest minute
3434
# if next run is today, future hour, get smallest minute
3535
# if next run is today, this hour, get next greatest minute
36-
next_run = datetime.datetime(current_time.year, current_time.month, current_time.day)
36+
next_run = datetime.datetime(current_time.year, current_time.month, current_time.day,
37+
tzinfo=current_time.tzinfo)
3738
weekday = current_time.isoweekday()
3839
weekday = 0 if weekday == 7 else weekday # Move Sunday to day 0
3940
if weekday in self.weekdays:

yawn/workflow/tests/test_models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import datetime
1010
from unittest import mock
1111

12+
import pytz
1213
from django.utils import timezone
1314

1415
from yawn.task.models import Template, Task
@@ -39,7 +40,7 @@ def test_first_ready():
3940

4041
@mock.patch('yawn.workflow.models.Crontab')
4142
def test_next_run(mock_cron):
42-
next_run = timezone.datetime(2011, 1, 1)
43+
next_run = timezone.datetime(2011, 1, 1, tzinfo=pytz.UTC)
4344
mock_cron().next_run.return_value = next_run
4445

4546
name = WorkflowName.objects.create(name='workflow1')

0 commit comments

Comments
 (0)