Beispiel #1
0
    def test_build_workspace_from_rdf_template(self):
        workspace, _junk = buildWorkspaceFromTemplate(self.rdfTemplate1, self.user)
        get_global_workspace_data(self.workspace, self.user)

        wiring_status = json.loads(workspace.wiringStatus)
        self.assertEqual(len(wiring_status['connections']), 1)
        self.assertEqual(wiring_status['connections'][0]['readOnly'], False)
Beispiel #2
0
    def setUp(self):
        super(WorkspaceCacheTestCase, self).setUp()

        self.user = User.objects.get(username='******')
        self.workspace = Workspace.objects.get(pk=1)

        # Fill cache
        get_global_workspace_data(self.workspace, self.user)
Beispiel #3
0
    def test_build_workspace_from_rdf_template_utf8_char(self):
        template = self.read_template('wt4.rdf')
        workspace, _junk = buildWorkspaceFromTemplate(template, self.user)
        data = json.loads(get_global_workspace_data(workspace, self.user).get_data())

        for t in data['tabs']:
            self.assertEqual(t['name'][0:7], u'Pestaña')
Beispiel #4
0
    def test_fill_workspace_using_template(self):
        fillWorkspaceUsingTemplate(self.workspace, self.template1)
        data = get_global_workspace_data(self.workspace, self.user).get_data()
        self.assertEqual(self.workspace.name, 'Testing')
        self.assertEqual(len(data['tabs']), 2)

        # Workspace template 2 adds a new Tab
        fillWorkspaceUsingTemplate(self.workspace, self.template2)
        data = get_global_workspace_data(self.workspace, self.user).get_data()
        self.assertEqual(len(data['tabs']), 3)

        # Check that we handle the case where there are 2 tabs with the same name
        fillWorkspaceUsingTemplate(self.workspace, self.template2)
        data = get_global_workspace_data(self.workspace, self.user).get_data()
        self.assertEqual(len(data['tabs']), 4)
        self.assertNotEqual(data['tabs'][2]['name'], data['tabs'][3]['name'])
Beispiel #5
0
    def test_read_only_widgets(self):
        template = self.read_template('wt6.xml')

        workspace, _junk = buildWorkspaceFromTemplate(template, self.user)
        data = json.loads(get_global_workspace_data(workspace, self.user).get_data())

        self.assertEqual(len(data['tabs'][0]['iwidgets']), 3)
        self.assertEqual(data['tabs'][0]['iwidgets'][0]['readOnly'], True)
Beispiel #6
0
    def test_fill_workspace_using_template(self):
        template = self.read_template('wt1.xml')
        fillWorkspaceUsingTemplate(self.workspace, template)
        data = json.loads(get_global_workspace_data(self.workspace, self.user).get_data())
        self.assertEqual(self.workspace.name, 'Testing')
        self.assertEqual(len(data['tabs']), 2)

        template = self.read_template('wt2.xml')
        # Workspace template 2 adds a new Tab
        fillWorkspaceUsingTemplate(self.workspace, template)
        data = json.loads(get_global_workspace_data(self.workspace, self.user).get_data())
        self.assertEqual(len(data['tabs']), 3)

        # Check that we handle the case where there are 2 tabs with the same name
        fillWorkspaceUsingTemplate(self.workspace, template)
        data = json.loads(get_global_workspace_data(self.workspace, self.user).get_data())
        self.assertEqual(len(data['tabs']), 4)
        self.assertNotEqual(data['tabs'][2]['name'], data['tabs'][3]['name'])
Beispiel #7
0
    def test_shared_workspace(self):

        from django.conf import settings
        if not hasattr(settings, 'WORKSPACE_MANAGERS') or 'wirecloud.platform.workspace.workspace_managers.OrganizationWorkspaceManager' not in settings.WORKSPACE_MANAGERS:
            raise unittest.SkipTest('OrganizationWorkspaceManager not enabled')

        workspace = Workspace.objects.get(pk=1)

        # Create a new group and share the workspace with it
        group = Group.objects.create(name='test_users')
        workspace.targetOrganizations.add(group)

        other_user = User.objects.get(username='******')
        other_user.groups.add(group)
        other_user.save()

        # Sync shared workspaces
        sync_base_workspaces(other_user)

        # Check that other_user can access to the shared workspace
        data = json.loads(get_global_workspace_data(workspace, other_user).get_data())
        iwidget_list = data['tabs'][0]['iwidgets']
        self.assertEqual(len(iwidget_list), 2)

        # Add a new iWidget to the workspace
        tab = Tab.objects.get(pk=1)
        iwidget_data = {
            'widget': 'Test/Test Widget/1.0.0',
            'name': 'test',
            'top': 0,
            'left': 0,
            'width': 2,
            'height': 2,
            'zIndex': 1,
            'layout': 0,
            'icon_top': 0,
            'icon_left': 0
        }
        SaveIWidget(iwidget_data, self.user, tab, {})

        data = json.loads(get_global_workspace_data(workspace, other_user).get_data())
        iwidget_list = data['tabs'][0]['iwidgets']
        self.assertEqual(len(iwidget_list), 3)
Beispiel #8
0
    def read(self, request, workspace_id):

        workspace = get_object_or_404(Workspace, pk=workspace_id)

        if not workspace.users.filter(pk=request.user.pk).exists():
            return HttpResponseForbidden()

        workspace_data = get_global_workspace_data(workspace, request.user)

        return workspace_data.get_response()
Beispiel #9
0
    def read(self, request, workspace_id):

        workspace = get_object_or_404(Workspace, pk=workspace_id)

        if not workspace.public and not (request.user.is_authenticated() and workspace.users.filter(pk=request.user.pk).exists()):
            return build_error_response(request, 403, _("You don't have permission to access this workspace"))

        workspace_data = get_global_workspace_data(workspace, request.user)

        return workspace_data.get_response()
Beispiel #10
0
    def test_get_global_workspace_data(self):

        workspace = Workspace.objects.get(pk=1)
        data = json.loads(get_global_workspace_data(workspace, self.user).get_data())
        self.assertEqual(len(data['tabs']), 1)

        tab = data['tabs'][0]
        variables = tab['iwidgets'][0]['variables']
        self.assertEqual(variables['password']['value'], '')
        self.assertEqual(variables['password']['secure'], True)
        self.assertEqual(variables['username']['value'], 'test_username')
        self.assertEqual(variables['prop']['value'], 'test_data')
Beispiel #11
0
    def check_workspace_with_params(self, workspace):

        workspace_data = json.loads(get_global_workspace_data(workspace, self.user).get_data())
        self.assertEqual(workspace_data['extra_prefs'], {'param': {'type': 'text', 'inheritable': False, 'label': u'Parameter'}})

        update_workspace_preferences(workspace, {'param': {'value': 'world'}});
        workspace_data = json.loads(get_global_workspace_data(workspace, self.user).get_data())

        iwidget1 = None
        iwidget2 = None
        iwidget3 = None
        for iwidget in workspace_data['tabs'][0]['iwidgets']:

            if iwidget['name'] == 'Test (1)':
                iwidget1 = iwidget
            elif iwidget['name'] == 'Test (2)':
                iwidget2 = iwidget
            else:
                iwidget3 = iwidget

        # Check iwidget 1 data
        iwidget1_vars = iwidget1['variables']

        self.assertEqual(iwidget1_vars['text']['value'], 'initial world')
        self.assertEqual(iwidget1_vars['text'].get('hidden', False), False)
        self.assertEqual(iwidget1_vars['text']['readonly'], True)

        # Check iwidget 2 data
        iwidget2_vars = iwidget2['variables']

        self.assertEqual(iwidget2_vars['text']['value'], 'initial world')
        self.assertEqual(iwidget2_vars['text']['hidden'], True)
        self.assertEqual(iwidget2_vars['text']['readonly'], True)

        # Check iwidget 3 data
        iwidget3_vars = iwidget3['variables']

        self.assertEqual(iwidget3_vars['text']['value'], 'initial %(params.param)')
        self.assertEqual(iwidget3_vars['text'].get('hidden', False), False)
        self.assertEqual(iwidget3_vars['text'].get('readonly', False), False)
Beispiel #12
0
    def test_shared_workspace(self):

        workspace = Workspace.objects.get(pk=1)

        # Create a new group and share the workspace with it
        group = Group.objects.create(name='test_users')
        workspace.targetOrganizations.add(group)

        other_user = User.objects.get(username='******')
        other_user.groups.add(group)
        other_user.save()

        # Sync shared workspaces
        sync_base_workspaces(other_user)

        # Check that other_user can access to the shared workspace
        data = get_global_workspace_data(workspace, other_user).get_data()
        iwidget_list = data['tabs'][0]['iwidgets']
        self.assertEqual(len(iwidget_list), 2)

        # Add a new iWidget to the workspace
        tab = Tab.objects.get(pk=1)
        iwidget_data = {
            'widget': 'Test/Test Widget/1.0.0',
            'name': 'test',
            'top': 0,
            'left': 0,
            'width': 2,
            'height': 2,
            'zIndex': 1,
            'layout': 0,
            'icon_top': 0,
            'icon_left': 0
        }
        SaveIWidget(iwidget_data, self.user, tab, {})

        data = get_global_workspace_data(workspace, other_user).get_data()
        iwidget_list = data['tabs'][0]['iwidgets']
        self.assertEqual(len(iwidget_list), 3)
Beispiel #13
0
    def test_create_empty_workspace(self):

        workspace = createEmptyWorkspace('Testing', self.user)

        user_workspace = UserWorkspace.objects.filter(user=self.user, workspace=workspace)
        self.assertEqual(user_workspace.count(), 1)
        self.assertEqual(user_workspace[0].active, True)

        workspace_tabs = Tab.objects.filter(workspace=workspace)
        self.assertEqual(workspace_tabs.count(), 1)

        data = json.loads(get_global_workspace_data(workspace, self.user).get_data())
        self.assertEqual(data['owned'], True)
        self.assertEqual(data['shared'], False)
Beispiel #14
0
    def test_merge_workspaces(self):

        workspace = Workspace.objects.get(pk=1)

        packageCloner = PackageCloner()
        cloned_workspace = packageCloner.clone_tuple(workspace)
        linkWorkspace(self.user, cloned_workspace.id, self.user)

        packageCloner = PackageCloner()
        packageCloner.merge_workspaces(cloned_workspace, workspace, self.user)

        # Check cache invalidation
        data = json.loads(get_global_workspace_data(workspace, self.user).get_data())
        tab_list = data['tabs']

        self.assertEqual(len(tab_list), 2)
Beispiel #15
0
    def check_basic_workspace_structure(self, workspace):

        wiring_status = json.loads(workspace.wiringStatus)

        self.assertEqual(len(wiring_status['connections']), 1)
        self.assertEqual(wiring_status['connections'][0]['readOnly'], False)

        workspace_data = json.loads(get_global_workspace_data(workspace, self.user).get_data())
        self.assertEqual(workspace.name, 'Test Mashup')
        self.assertEqual(len(workspace_data['tabs']), 1)

        if workspace_data['tabs'][0]['iwidgets'][0]['name'] == 'Test (1)':

            iwidget1 = workspace_data['tabs'][0]['iwidgets'][0]
            iwidget2 = workspace_data['tabs'][0]['iwidgets'][1]

        else:

            iwidget1 = workspace_data['tabs'][0]['iwidgets'][1]
            iwidget2 = workspace_data['tabs'][0]['iwidgets'][0]

        # Check iwidget 1 data
        self.assertEqual(iwidget1.get('readonly', False), False)

        iwidget1_vars = iwidget1['variables']

        self.assertEqual(iwidget1_vars['list']['value'], 'default')
        self.assertEqual(iwidget1_vars['list']['hidden'], True)
        self.assertEqual(iwidget1_vars['list']['readonly'], True)

        self.assertEqual(iwidget1_vars['text']['value'], 'initial text')
        self.assertEqual(iwidget1_vars['text']['hidden'], False)
        self.assertEqual(iwidget1_vars['text']['readonly'], True)

        # Check iwidget 2 data
        self.assertEqual(iwidget1.get('readonly', False), False)

        iwidget2_vars = iwidget2['variables']

        self.assertEqual(iwidget2_vars['list']['value'], 'value1')
        self.assertEqual(iwidget2_vars['list'].get('hidden', False), False)
        self.assertEqual(iwidget2_vars['list'].get('readonly', False), False)

        self.assertEqual(iwidget2_vars['text']['value'], 'value2')
        self.assertEqual(iwidget2_vars['text'].get('hidden', False), False)
        self.assertEqual(iwidget2_vars['text'].get('readonly', False), False)
Beispiel #16
0
    def test_variable_updating_invalidates_cache(self):

        client = Client()
        put_data = [
            {'id': 1, 'value': 'new_password'},
            {'id': 2, 'value': 'new_username'},
            {'id': 4, 'value': 'new_data'},
        ]

        put_data = json.dumps(put_data, ensure_ascii=False).encode('utf-8')
        client.login(username='******', password='******')
        result = client.post(reverse('wirecloud.variable_collection', kwargs={'workspace_id': 1}), put_data, content_type='application/json', HTTP_HOST='localhost', HTTP_REFERER='http://localhost')
        self.assertEqual(result.status_code, 204)

        data = json.loads(get_global_workspace_data(self.workspace, self.user).get_data())
        variables = data['tabs'][0]['iwidgets'][0]['variables']
        self.assertEqual(variables['password']['value'], '')
        self.assertEqual(variables['password']['secure'], True)
        self.assertEqual(variables['username']['value'], 'new_username')
        self.assertEqual(variables['prop']['value'], 'new_data')
Beispiel #17
0
    def test_widget_instantiation_invalidates_cache(self):

        tab = Tab.objects.get(pk=1)
        iwidget_data = {
            'widget': 'Test/Test Widget/1.0.0',
            'name': 'test',
            'top': 0,
            'left': 0,
            'width': 2,
            'height': 2,
            'zIndex': 1,
            'layout': 0,
            'icon_top': 0,
            'icon_left': 0
        }
        SaveIWidget(iwidget_data, self.user, tab, {})

        data = json.loads(get_global_workspace_data(self.workspace, self.user).get_data())

        iwidget_list = data['tabs'][0]['iwidgets']
        self.assertEqual(len(iwidget_list), 3)
Beispiel #18
0
    def test_complex_workspaces_rdf(self):
        workspace, _junk = buildWorkspaceFromTemplate(self.rdfTemplate3, self.user)

        data = get_global_workspace_data(workspace, self.user).get_data()

        self.assertEqual(len(data['tabs']), 4)
        self.assertEqual(data['tabs'][0]['name'], u'Tab')
        self.assertEqual(len(data['tabs'][0]['iwidgets']), 1)
        self.assertEqual(data['tabs'][1]['name'], u'Tab 2')
        self.assertEqual(len(data['tabs'][1]['iwidgets']), 1)
        self.assertEqual(data['tabs'][2]['name'], u'Tab 3')
        self.assertEqual(len(data['tabs'][2]['iwidgets']), 0)
        self.assertEqual(data['tabs'][3]['name'], u'Tab 4')
        self.assertEqual(len(data['tabs'][3]['iwidgets']), 0)

        wiring = data['wiring']
        self.assertEqual(len(wiring['connections']), 1)
        self.assertEqual(wiring['connections'][0]['source']['type'], 'iwidget')
        self.assertEqual(wiring['connections'][0]['source']['endpoint'], 'event')
        self.assertEqual(wiring['connections'][0]['target']['type'], 'iwidget')
        self.assertEqual(wiring['connections'][0]['target']['endpoint'], 'slot')
Beispiel #19
0
    def test_complex_workspaces(self):
        template3 = self.read_template('wt3.xml')

        workspace, _junk = buildWorkspaceFromTemplate(template3, self.user)
        data = json.loads(get_global_workspace_data(workspace, self.user).get_data())

        self.assertEqual(len(data['tabs']), 4)
        self.assertEqual(data['tabs'][0]['name'], 'Tab')
        self.assertEqual(len(data['tabs'][0]['iwidgets']), 1)
        self.assertEqual(data['tabs'][1]['name'], 'Tab 2')
        self.assertEqual(len(data['tabs'][1]['iwidgets']), 1)
        self.assertEqual(data['tabs'][2]['name'], 'Tab 3')
        self.assertEqual(len(data['tabs'][2]['iwidgets']), 0)
        self.assertEqual(data['tabs'][3]['name'], 'Tab 4')
        self.assertEqual(len(data['tabs'][3]['iwidgets']), 0)

        wiring_status = data['wiring']
        self.assertEqual(len(wiring_status['operators']), 1)
        self.assertEqual(len(wiring_status['connections']), 1)
        self.assertEqual(wiring_status['connections'][0]['source']['type'], 'iwidget')
        self.assertEqual(wiring_status['connections'][0]['source']['endpoint'], 'event')
        self.assertEqual(wiring_status['connections'][0]['target']['type'], 'iwidget')
        self.assertEqual(wiring_status['connections'][0]['target']['endpoint'], 'slot')
Beispiel #20
0
    def read(self, request, workspace_id):

        workspace = get_object_or_404(Workspace, users__id=request.user.id, pk=workspace_id)
        workspace_data = get_global_workspace_data(workspace, request.user)

        return workspace_data.get_response()
Beispiel #21
0
 def test_workspace_data_is_cached(self):
     workspace_info = get_global_workspace_data(self.workspace, self.user)
     self.assertEqual(self.initial_info.timestamp, workspace_info.timestamp)
Beispiel #22
0
    def test_build_workspace_from_rdf_template_utf8_char(self):
        workspace, _junk = buildWorkspaceFromTemplate(self.rdfTemplate4, self.user)
        data = get_global_workspace_data(workspace, self.user).get_data()

        for t in data['tabs']:
            self.assertEqual(t['name'][0:7], u'Pestaña')
Beispiel #23
0
                    build_error_response(request, 424, _('Downloaded invalid resource description from: %(url)s') % {'url': resource.template_uri})

            try:
                check_mashup_dependencies(template, request.user)
            except MissingDependencies, e:
                details = {
                    'missingDependencies': e.missing_dependencies,
                }
                return build_error_response(request, 422, unicode(e), details=details)

            if dry_run:
                return HttpResponse(status=204)

            workspace, _junk = buildWorkspaceFromTemplate(template, request.user, True)

        workspace_data = get_global_workspace_data(workspace, request.user)

        return workspace_data.get_response(status_code=201, cacheable=False)


class WorkspaceEntry(Resource):

    @authentication_required
    def read(self, request, workspace_id):

        workspace = get_object_or_404(Workspace, pk=workspace_id)

        if not workspace.users.filter(pk=request.user.pk).exists():
            return HttpResponseForbidden()

        workspace_data = get_global_workspace_data(workspace, request.user)
Beispiel #24
0
    def create(self, request):

        try:
            data = json.loads(request.body)
        except ValueError as e:
            msg = _("malformed json data: %s") % unicode(e)
            return build_error_response(request, 400, msg)

        workspace_name = data.get('name', '').strip()
        workspace_id = data.get('workspace', '')
        mashup_id = data.get('mashup', '')
        try:
            allow_renaming = normalize_boolean_param('allow_renaming', data.get('allow_renaming', False))
            dry_run = normalize_boolean_param('allow_renaming', data.get('dry_run', False))
        except (TypeError, ValueError) as e:
            return build_error_response(request, 422, unicode(e))

        if mashup_id == '' and workspace_id == '' and workspace_name == '':
            return build_error_response(request, 422, _('Missing name parameter'))
        elif  mashup_id != '' and workspace_id != '':
            return build_error_response(request, 422, _('Workspace and mashup parameters cannot be used at the same time'))

        if mashup_id == '' and workspace_id == '':

            if not is_valid_name(workspace_name):
                return build_error_response(request, 422, _('invalid workspace name'))

            if dry_run:
                return HttpResponse(status=204)

            try:
                workspace = createEmptyWorkspace(workspace_name, request.user, allow_renaming=allow_renaming)
            except IntegrityError:
                msg = _('A workspace with the given name already exists')
                return build_error_response(request, 409, msg)
        else:

            if mashup_id != '':
                values = mashup_id.split('/', 3)
                if len(values) != 3:
                    return build_error_response(request, 422, _('invalid mashup id'))

                (mashup_vendor, mashup_name, mashup_version) = values
                try:
                    resource = CatalogueResource.objects.get(vendor=mashup_vendor, short_name=mashup_name, version=mashup_version)
                    if not resource.is_available_for(request.user) or resource.resource_type() != 'mashup':
                        raise CatalogueResource.DoesNotExist
                except CatalogueResource.DoesNotExist:
                    return build_error_response(request, 422, _('Mashup not found: %(mashup_id)s') % {'mashup_id': mashup_id})

                if resource.fromWGT:
                    base_dir = catalogue.wgt_deployer.get_base_dir(mashup_vendor, mashup_name, mashup_version)
                    wgt_file = WgtFile(os.path.join(base_dir, resource.template_uri))
                    template = TemplateParser(wgt_file.get_template())
                else:
                    template = download_http_content(resource.template_uri, user=request.user)
                    try:
                        template = TemplateParser(template)
                    except:
                        build_error_response(request, 422, _('Downloaded invalid resource description from: %(url)s') % {'url': resource.template_uri})

            else:

                from_ws = get_object_or_404(Workspace, id=workspace_id)
                if from_ws.public is False and not request.user.is_superuser and from_ws.creator != request.user:
                    return build_error_response(request, 403, _('You are not allowed to read from workspace %s') % workspace_id)

                options = {
                    'vendor': 'api',
                    'name': from_ws.name,
                    'version': '1.0',
                    'title': '',
                    'description': 'Temporal mashup for the workspace copy operation',
                    'email': '*****@*****.**',
                }

                template = TemplateParser(build_json_template_from_workspace(options, from_ws, from_ws.creator))

            try:
                check_mashup_dependencies(template, request.user)
            except MissingDependencies as e:
                details = {
                    'missingDependencies': e.missing_dependencies,
                }
                return build_error_response(request, 422, unicode(e), details=details)

            if dry_run:
                return HttpResponse(status=204)

            if workspace_name == '':
                workspace_name = None

            try:
                workspace, _junk = buildWorkspaceFromTemplate(template, request.user, allow_renaming=allow_renaming, new_name=workspace_name)
            except IntegrityError:
                msg = _('A workspace with the given name already exists')
                return build_error_response(request, 409, msg)

        workspace_data = get_global_workspace_data(workspace, request.user)

        return workspace_data.get_response(status_code=201, cacheable=False)
Beispiel #25
0
    def test_widget_deletion_invalidates_cache(self):

        deleteIWidget(IWidget.objects.get(pk=1), self.user)
        data = json.loads(get_global_workspace_data(self.workspace, self.user).get_data())
        iwidget_list = data['tabs'][0]['iwidgets']
        self.assertEqual(len(iwidget_list), 1)