def test_obtain_sandbox_create_new(self): user = User(id=1) user.save() project = Project(id=1, created_by=user) project.save() branch = Branch(id=1, project_ref=project, created_by=user) branch.save() branch_revision_1 = BranchRevision(id=1, branch_ref=branch, revision_number=0) branch_revision_1.save() branch_revision_2 = BranchRevision(id=1, branch_ref=branch, revision_number=1) branch_revision_2.save() branch_revision_3 = BranchRevision(id=1, branch_ref=branch, revision_number=2) branch_revision_3.save() sandbox = utils.obtain_sandbox(user, branch.id) self.assertEqual(sandbox.created_by, user) self.assertEqual(sandbox.bound_to_branch_ref, branch) self.assertEqual(sandbox.created_from_branch_revision_ref, branch_revision_3) self.assertEqual(sandbox.status, 0)
def change(self, request, id=None): """ Persists a change for given branch revision. Change is persisted as sandbox change. """ serializer = ChangeSerializer(data=request.DATA) if serializer.is_valid(): branch_rev = BranchRevision.objects.filter(id=id).first() sandbox = utils.obtain_sandbox(request.user, branch_rev.branch_ref.id) if sandbox.status != 0: return Response(error="cannot commit a closed sandbox", status=status.HTTP_400_BAD_REQUEST) change = serializer.object change.made_by = request.user change.save() sandbox_change = SandboxChange() sandbox_change.change_ref = change sandbox_change.ordinal = SandboxChange.objects.filter( change_ref=change).count() + 1 sandbox_change.sandbox_ref = sandbox sandbox_change.save() return Response(status=status.HTTP_204_NO_CONTENT) else: print "\nerrors occured:\n" print serializer.errors return Response("error occured", status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def change(self, request, id=None): """ Persists a change for given branch revision. Change is persisted as sandbox change. """ serializer = ChangeSerializer(data=request.DATA) if serializer.is_valid(): branch_rev = BranchRevision.objects.filter(id=id).first() sandbox = utils.obtain_sandbox(request.user, branch_rev.branch_ref.id) if sandbox.status != 0: return Response(error="cannot commit a closed sandbox", status=status.HTTP_400_BAD_REQUEST) change = serializer.object change.made_by = request.user change.save() sandbox_change = SandboxChange() sandbox_change.change_ref = change sandbox_change.ordinal = SandboxChange.objects.filter(change_ref=change).count() + 1 sandbox_change.sandbox_ref = sandbox sandbox_change.save() return Response(status=status.HTTP_204_NO_CONTENT) else: print "\nerrors occured:\n" print serializer.errors return Response("error occured", status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def metadata(self, request, id=None): """ Builds and returns sandbox metadata. """ branch_revision = self.get_object() user = request.user sandbox = utils.obtain_sandbox(user, branch_revision.branch_ref.id) sandbox_state = SandboxState(user, sandbox) sandbox_state.build_sandbox_state_metadata() schemas = sandbox_state.schemas serializer = SchemaSerializer(schemas, many=True) return Response(serializer.data, status=status.HTTP_200_OK)
def diagram(self, request, id=None): """ Builds and returns single diagram. """ branch_revision = self.get_object() user = request.user sandbox = utils.obtain_sandbox(user, branch_revision.branch_ref.id) sandbox_state = SandboxState(user, sandbox) sandbox_state.build_sandbox_state_symbols() diagram = sandbox_state.retrieve_diagram_details(request.QUERY_PARAMS.get('diagramId', None)) serializer = DiagramSerializer(diagram) return Response(serializer.data, status=status.HTTP_200_OK)
def project_state(self, request, id=None): """ Builds and returns full sandbox state. Contains both metadata and symbols (diagrams) """ branch_revision = self.get_object() user = request.user sandbox = utils.obtain_sandbox(user, branch_revision.branch_ref.id) sandbox_state = SandboxState(user, sandbox) sandbox_state.build_sandbox_state_metadata() sandbox_state.build_sandbox_state_symbols() sandbox_info = sandbox_state.build_project_info() serializer = SandboxBasicInfoSerializer(sandbox_info) return Response(serializer.data, status=status.HTTP_200_OK)
def diagram(self, request, id=None): """ Builds and returns single diagram. """ branch_revision = self.get_object() user = request.user sandbox = utils.obtain_sandbox(user, branch_revision.branch_ref.id) sandbox_state = SandboxState(user, sandbox) sandbox_state.build_sandbox_state_symbols() diagram = sandbox_state.retrieve_diagram_details( request.QUERY_PARAMS.get('diagramId', None)) serializer = DiagramSerializer(diagram) return Response(serializer.data, status=status.HTTP_200_OK)
def commit(self, request, id=None): """ Commits current sandbox changes. See 'utils.commit_sandbox' """ branch_revision = self.get_object() latest_branch_revision = BranchRevision.objects.filter(branch_ref=branch_revision.branch_ref).order_by( '-revision_number').first() if branch_revision.id != latest_branch_revision.id: return Response("cannot commit a on branch revision that is not latest!", status=status.HTTP_400_BAD_REQUEST) user = request.user sandbox = utils.obtain_sandbox(user, branch_revision.branch_ref.id) if sandbox.status != 0: return Response("cannot commit a closed sandbox", status=status.HTTP_400_BAD_REQUEST) utils.commit_sandbox(sandbox, request.user) return Response(status=status.HTTP_200_OK)
def commit(self, request, id=None): """ Commits current sandbox changes. See 'utils.commit_sandbox' """ branch_revision = self.get_object() latest_branch_revision = BranchRevision.objects.filter( branch_ref=branch_revision.branch_ref).order_by( '-revision_number').first() if branch_revision.id != latest_branch_revision.id: return Response( "cannot commit a on branch revision that is not latest!", status=status.HTTP_400_BAD_REQUEST) user = request.user sandbox = utils.obtain_sandbox(user, branch_revision.branch_ref.id) if sandbox.status != 0: return Response("cannot commit a closed sandbox", status=status.HTTP_400_BAD_REQUEST) utils.commit_sandbox(sandbox, request.user) return Response(status=status.HTTP_200_OK)