More tests, mock generation awesomeness

pull/295/head
Piero Toffanin 2017-09-05 18:14:16 -04:00
rodzic 765835c487
commit 96395c39aa
9 zmienionych plików z 137 dodań i 12 usunięć

Wyświetl plik

@ -14,8 +14,11 @@ class ProjectSerializer(serializers.ModelSerializer):
permissions = serializers.SerializerMethodField()
def get_permissions(self, obj):
return list(map(lambda p: p.replace("_project", ""), get_perms(self.context['request'].user, obj)))
if 'request' in self.context:
return list(map(lambda p: p.replace("_project", ""), get_perms(self.context['request'].user, obj)))
else:
# Cannot list permissions, no user is associated with request (happens when serializing ui test mocks)
return []
class Meta:
model = models.Project

Wyświetl plik

@ -2,10 +2,15 @@ import React from 'react';
import { shallow } from 'enzyme';
import EditPresetDialog from '../EditPresetDialog';
let presetMock = require('../../tests/utils/MockLoader').load("preset.json");
describe('<EditPresetDialog />', () => {
it('renders without exploding', () => {
const wrapper = shallow(<EditPresetDialog
preset={presetMock}
availableOptions={[]}
saveAction={() => {}}
deleteAction={() => {}}
/>);
expect(wrapper.exists()).toBe(true);
})

Wyświetl plik

@ -0,0 +1,12 @@
import React from 'react';
import { shallow } from 'enzyme';
import EditProjectDialog from '../EditProjectDialog';
describe('<EditProjectDialog />', () => {
it('renders without exploding', () => {
const wrapper = shallow(<EditProjectDialog
saveAction={() => {}}
/>);
expect(wrapper.exists()).toBe(true);
})
});

Wyświetl plik

@ -0,0 +1,10 @@
import React from 'react';
import { shallow } from 'enzyme';
import EditTaskForm from '../EditTaskForm';
describe('<EditTaskForm />', () => {
it('renders without exploding', () => {
const wrapper = shallow(<EditTaskForm />);
expect(wrapper.exists()).toBe(true);
})
});

Wyświetl plik

@ -0,0 +1,16 @@
import React from 'react';
import { shallow } from 'enzyme';
import EditTaskPanel from '../EditTaskPanel';
let taskMock = require('../../tests/utils/MockLoader').load("task.json");
describe('<EditTaskPanel />', () => {
it('renders without exploding', () => {
const wrapper = shallow(<EditTaskPanel
task={taskMock}
onSave={() => {}}
onCancel={() => {}}
/>);
expect(wrapper.exists()).toBe(true);
})
});

Wyświetl plik

@ -0,0 +1,20 @@
import React from 'react';
import { shallow } from 'enzyme';
import ErrorMessage from '../ErrorMessage';
class MockComponent extends React.Component {
constructor(props){
super(props);
this.state = {
error: 'My error'
};
}
}
describe('<ErrorMessage />', () => {
it('renders without exploding', () => {
const wrapper = shallow(<ErrorMessage bind={[new MockComponent(), 'error']} />);
expect(wrapper.exists()).toBe(true);
})
});

Wyświetl plik

@ -0,0 +1,10 @@
import React from 'react';
import { shallow } from 'enzyme';
import FormDialog from '../FormDialog';
describe('<FormDialog />', () => {
it('renders without exploding', () => {
const wrapper = shallow(<FormDialog bind={[new MockComponent(), 'error']} />);
expect(wrapper.exists()).toBe(true);
})
});

Wyświetl plik

@ -0,0 +1,16 @@
const fs = require('fs');
const path = require('path');
module.exports = {
// Load a mock from the <root>/build/mocks directory
load: function(mockPath){
try{
return JSON.parse(fs.readFileSync(
path.join(__dirname, "..", "..", "..", "..", "..", "..", "build", "mocks", mockPath),
'utf8'
));
}catch(e){
throw new Error(`Invalid mock ${path}: ${e.message}`);
}
}
};

Wyświetl plik

@ -10,26 +10,59 @@ It will only run when called explicitly via:
import os
import sys
from shutil import rmtree
import logging
from django.contrib.auth.models import User
from rest_framework.renderers import JSONRenderer
from app.api.projects import ProjectSerializer
from app.api.tasks import TaskSerializer
from app.models import Project
from app.models import Task
from webodm import settings
from .classes import BootTestCase
from app.models import Preset
from app.api.presets import PresetSerializer
logger = logging.getLogger('app.logger')
BUILD_MOCKS_PATH = os.path.join(settings.BASE_DIR, "build", "mocks")
def write_mock(dst_path, serializer):
with open(os.path.join(BUILD_MOCKS_PATH, dst_path), "w") as f:
f.write(JSONRenderer().render(serializer.data).decode("utf-8"))
logger.info("Written {}".format(dst_path))
class TestGenerateUiMocks(BootTestCase):
def setUp(self):
# TODO: delete old mocks
pass
if os.path.exists(BUILD_MOCKS_PATH):
logger.info("Existing mocks path exists, removing it...")
rmtree(BUILD_MOCKS_PATH)
os.mkdir(BUILD_MOCKS_PATH)
logger.info("Created {}".format(BUILD_MOCKS_PATH))
def tearDown(self):
pass
def test_preset_mock(self):
preset = Preset.objects.first()
self.assertTrue(True)
# TODO: save json to destination
def test_mocks(self):
write_mock("preset.json", PresetSerializer(Preset.objects.first()))
project = Project.objects.create(
owner=User.objects.get(username="testsuperuser"),
name="mock project"
)
write_mock("project.json", ProjectSerializer(project))
write_mock("task.json", TaskSerializer(Task.objects.create(name="mock task", project=project)))
# Do not generate mocks during normal testing
GENERATE_MOCKS = len(sys.argv) >= 4 and \
sys.argv[1:2] == 'test' and\
sys.argv[2:3] == ['app.tests.' + (os.path.splitext(__file__)[0])]
GENERATE_MOCKS = len(sys.argv) >= 3 and \
sys.argv[1:2] == ['test'] and\
sys.argv[2:3] == ['app.tests.' + (os.path.splitext(os.path.basename(__file__))[0])]
if not GENERATE_MOCKS:
del TestGenerateUiMocks