kopia lustrzana https://github.com/OpenDroneMap/WebODM
More tests, mock generation awesomeness
rodzic
765835c487
commit
96395c39aa
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
})
|
||||
|
|
|
@ -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);
|
||||
})
|
||||
});
|
|
@ -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);
|
||||
})
|
||||
});
|
|
@ -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);
|
||||
})
|
||||
});
|
|
@ -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);
|
||||
})
|
||||
});
|
|
@ -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);
|
||||
})
|
||||
});
|
|
@ -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}`);
|
||||
}
|
||||
}
|
||||
};
|
|
@ -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
|
Ładowanie…
Reference in New Issue