def testImportObjectWithIntSixDigitValue(self):
     """The Data Import Handler correctly imports C{int} values."""
     objectID = self.objects.create()
     self.values.set({objectID: {u'user/tag': 123456}})
     runDataImportHandler(self.client.url)
     yield self.assertQuery([objectID], u'user/tag = 123456')
     yield self.assertQuery([objectID], u'has user/tag')
Exemple #2
0
 def testRenderRecentUsersActivity(self):
     """
     L{RecentUsersActivityResource.deferred_render_GET} renders a response
     with recent activity data by the users returned by the given query.
     """
     objectID = ObjectAPI(self.user).create(u'object1')
     self.store.commit()
     TagValueAPI(self.user).set({objectID: {u'username/tag1': u'A'}})
     runDataImportHandler(self.client.url)
     request = FakeRequest(
         args={'query': ['fluiddb/users/username = "******"']})
     with login(u'username', self.user.objectID, self.transact) as session:
         resource = RecentUsersActivityResource(self.facade, session)
         body = yield resource.deferred_render_GET(request)
         body = json.loads(body)
         expected = [{
             u'about': u'object1',
             u'id': str(objectID),
             u'tag': u'username/tag1',
             u'username': u'username',
             u'value': u'A'
         }]
         # Clean up timestamps.
         for item in body:
             del item['updated-at']
         self.assertEqual(expected, body)
         self.assertEqual(http.OK, request.code)
 def testImportObjectWithBoolValue(self):
     """The Data Import Handler correctly imports C{boolean} values."""
     objectID = self.objects.create()
     self.values.set({objectID: {u'user/tag': False}})
     runDataImportHandler(self.client.url)
     yield self.assertQuery([objectID], u'user/tag = false')
     yield self.assertQuery([objectID], u'has user/tag')
    def testDeltaImport(self):
        """
        When using a C{clean=false} option, the Data Import Handler only
        imports values modified since the last run.
        """
        objectID1 = self.objects.create()
        objectID2 = self.objects.create()

        self.values.set({objectID1: {
            u'user/tag1': u'string',
            u'user/tag2': 5,
            u'user/tag3': 5.5}})

        getDirtyObjects().remove()

        self.values.set({objectID2: {
            u'user/tag1': u'string',
            u'user/tag2': 5,
            u'user/tag3': 5.5}})

        runDataImportHandler(self.client.url, clean=False)

        yield self.assertQuery(
            [objectID2], 'has user/tag1 and has user/tag2 and has user/tag3 '
                         'and user/tag1="string" and user/tag2=5 and '
                         'user/tag3=5.5')
Exemple #5
0
 def testRenderRecentUsersActivity(self):
     """
     L{RecentUsersActivityResource.deferred_render_GET} renders a response
     with recent activity data by the users returned by the given query.
     """
     objectID = ObjectAPI(self.user).create(u'object1')
     self.store.commit()
     TagValueAPI(self.user).set({objectID: {u'username/tag1': u'A'}})
     runDataImportHandler(self.client.url)
     request = FakeRequest(
         args={'query': ['fluiddb/users/username = "******"']})
     with login(u'username', self.user.objectID, self.transact) as session:
         resource = RecentUsersActivityResource(self.facade, session)
         body = yield resource.deferred_render_GET(request)
         body = json.loads(body)
         expected = [{u'about': u'object1',
                      u'id': str(objectID),
                      u'tag': u'username/tag1',
                      u'username': u'username',
                      u'value': u'A'}]
         # Clean up timestamps.
         for item in body:
             del item['updated-at']
         self.assertEqual(expected, body)
         self.assertEqual(http.OK, request.code)
 def testImportObjectWithFloatValue(self):
     """The Data Import Handler correctly imports C{float} values."""
     objectID = self.objects.create()
     self.values.set({objectID: {u'user/tag': 5.5}})
     runDataImportHandler(self.client.url)
     yield self.assertQuery([objectID], u'user/tag = 5.5')
     yield self.assertQuery([objectID], u'has user/tag')
 def testImportObjectWithEmptyStringValue(self):
     """The Data Import Handler correctly imports empty C{string} values."""
     objectID = self.objects.create()
     self.values.set({objectID: {u'user/tag': u''}})
     runDataImportHandler(self.client.url)
     yield self.assertQuery([objectID], u'user/tag = ""')
     yield self.assertQuery([objectID], u'has user/tag')
 def testImportObjectWithListValue(self):
     """The Data Import Handler correctly imports C{list} values."""
     objectID = self.objects.create()
     self.values.set({objectID: {u'user/tag': [u'one', u'two', u'three']}})
     runDataImportHandler(self.client.url)
     yield self.assertQuery([objectID], u'user/tag contains "one" '
                                        u'and user/tag contains "two" '
                                        u'and user/tag contains "three"')
     yield self.assertQuery([objectID], u'has user/tag')
 def testImportObjectWithBinaryValue(self):
     """The Data Import Handler correctly imports C{binary} values."""
     objectID = self.objects.create()
     self.values.set({objectID: {
         u'user/tag': {
             'mime-type': 'text/plain',
             'contents': 'file contents'}}})
     runDataImportHandler(self.client.url)
     yield self.assertQuery([objectID], u'has user/tag')
 def testImportObjectWithStringValueInvalidXML(self):
     """
     The Data Import Handler correctly imports C{string} values, including
     those that contain invalid XML characters.
     """
     objectID = self.objects.create()
     self.values.set({objectID: {u'user/tag': u'foo \uFFFE'}})
     runDataImportHandler(self.client.url)
     yield self.assertQuery([objectID], u'user/tag = "foo \uFFFE"')
     yield self.assertQuery([objectID], u'has user/tag')
 def testImportObjectWithStringValueWithSpecialCharacters(self):
     """
     The Data Import Handler correctly imports C{string} values with special
     unicode characters.
     """
     objectID = self.objects.create()
     self.values.set({objectID: {u'user/tag': u'\xe1\xe9\xed\xf3'}})
     runDataImportHandler(self.client.url)
     yield self.assertQuery([objectID], u'user/tag = "\xe1\xe9\xed\xf3"')
     yield self.assertQuery([objectID], u'has user/tag')
 def testImportDeletedObject(self):
     """The Data Import Handler removes all fields from deleted objects"""
     objectID1 = self.objects.create()
     objectID2 = self.objects.create()
     self.values.set({objectID1: {u'user/tag1': u'string'},
                      objectID2: {u'user/tag1': u'string'}})
     self.values.delete([(objectID1, u'user/tag1')])
     runDataImportHandler(self.client.url)
     yield self.assertQuery([objectID2], 'has user/tag1')
     yield self.assertQuery([objectID2], 'user/tag1 = "string"')
 def testImportObjectWithListValueWithSpecialCharacters(self):
     """
     The Data Import Handler correctly imports C{list} values with special
     unicode characters.
     """
     objectID = self.objects.create()
     self.values.set({objectID: {u'user/tag': [u'one', u'\xe1\xe9']}})
     runDataImportHandler(self.client.url)
     yield self.assertQuery([objectID], u'user/tag contains "\xe1\xe9"')
     yield self.assertQuery([objectID], u'has user/tag')
 def testImportObjectWithDoubleQuotesValue(self):
     """
     The Data Import Handler correctly imports C{string} values with double
     quotes.
     """
     objectID = self.objects.create()
     self.values.set({objectID: {u'user/tag': u'hello\"world'}})
     runDataImportHandler(self.client.url)
     yield self.assertQuery([objectID], u'user/tag = "hello\\\"world"')
     yield self.assertQuery([objectID], u'has user/tag')
 def testImportObjectWithListValueWithEmptyString(self):
     """
     The Data Import Handler correctly imports C{list} values with an empty
     string in them.
     """
     objectID = self.objects.create()
     self.values.set({objectID: {u'user/tag': [u'']}})
     runDataImportHandler(self.client.url)
     yield self.assertQuery([objectID], u'user/tag contains ""')
     yield self.assertQuery([objectID], u'has user/tag')
    def testImportObjectWithCommaAndParens(self):
        """
        The Data Import Handler correctly imports C{string} values with comma
        and parens.
        """
        objectID = self.objects.create()
        self.values.set({objectID: {u'user/tag': u'),'}})
        runDataImportHandler(self.client.url)

        yield self.assertQuery([objectID], u'user/tag = "),"')
        yield self.assertQuery([objectID], u'has user/tag')
Exemple #17
0
 def testRenderRecentObjectActivityWithNoQuery(self):
     """
     L{RecentUsersActivityResource.deferred_render_GET} raises
     L{MissingArgument} if the C{query} argument is not given.
     """
     objectID = ObjectAPI(self.user).create(u'object1')
     self.store.commit()
     TagValueAPI(self.user).set({objectID: {u'username/tag1': u'A'}})
     runDataImportHandler(self.client.url)
     request = FakeRequest()
     with login(u'username', self.user.objectID, self.transact) as session:
         resource = RecentUsersActivityResource(self.facade, session)
         deferred = resource.deferred_render_GET(request)
         yield self.assertFailure(deferred, MissingArgument)
 def testImportDeletedAndCreatedAgainObject(self):
     """
     The Data Import Handler correctly imports values deleted and created
     again.
     """
     objectID1 = self.objects.create()
     objectID2 = self.objects.create()
     self.values.set({objectID1: {u'user/tag1': u'string'},
                      objectID2: {u'user/tag1': u'string'}})
     self.values.delete([(objectID1, u'user/tag1')])
     self.values.set({objectID1: {u'user/tag1': u'string'}})
     runDataImportHandler(self.client.url)
     yield self.assertQuery([objectID1, objectID2], 'has user/tag1')
     yield self.assertQuery([objectID1, objectID2], 'user/tag1 = "string"')
Exemple #19
0
 def testRenderRecentObjectActivityWithNoQuery(self):
     """
     L{RecentUsersActivityResource.deferred_render_GET} raises
     L{MissingArgument} if the C{query} argument is not given.
     """
     objectID = ObjectAPI(self.user).create(u'object1')
     self.store.commit()
     TagValueAPI(self.user).set({objectID: {u'username/tag1': u'A'}})
     runDataImportHandler(self.client.url)
     request = FakeRequest()
     with login(u'username', self.user.objectID, self.transact) as session:
         resource = RecentUsersActivityResource(self.facade, session)
         deferred = resource.deferred_render_GET(request)
         yield self.assertFailure(deferred, MissingArgument)
 def testImportObjectWithBinaryValueDoesNotCreateOtherValues(self):
     """
     The Data Import Handler does not import binary tag values as other Solr
     fields. This is a test for issue #1447.
     """
     objectID = self.objects.create()
     self.values.set({objectID: {
         u'user/tag': {
             'mime-type': 'text/plain',
             'contents': 'file contents'}}})
     runDataImportHandler(self.client.url)
     yield self.assertQuery([objectID], u'has user/tag')
     yield self.assertQuery([], u'user/tag = 13')
     yield self.assertQuery([], u'user/tag = "size"')
    def testImportMultipleObjects(self):
        """The Data Import Handler imports multiple objects."""
        objectID1 = self.objects.create()
        objectID2 = self.objects.create()
        objectID3 = self.objects.create()
        objectID4 = self.objects.create()
        self.values.set({objectID1: {u'user/tag1': u'string'},
                         objectID2: {u'user/tag1': u'string'},
                         objectID3: {u'user/tag1': 5},
                         objectID4: {u'user/tag2': True}})
        runDataImportHandler(self.client.url)

        yield self.assertQuery([objectID1, objectID2], 'user/tag1 = "string"')
        yield self.assertQuery([objectID1, objectID2, objectID3],
                               'has user/tag1')
 def testDeltaImportWithDeletedTag(self):
     """
     L{TagValue}s deleted via delete cascade triggered by a L{Tag} deletion
     should be deleted in the index too.
     """
     objectID = self.objects.create()
     self.values.set({objectID: {u'user/tag1': u'string',
                                 u'user/tag2': u'text'}})
     time.sleep(1)
     runDataImportHandler(self.client.url)
     tags = TagAPI(self.user)
     tags.delete([u'user/tag1'])
     self.store.commit()
     values = self.values.get([objectID], [u'user/tag1'])
     self.assertNotIn(u'user/tag1', values[objectID])
     runDataImportHandler(self.client.url, clean=False)
     yield self.assertQuery([], 'has user/tag1')
     yield self.assertQuery([], 'user/tag1 = "string"')
Exemple #23
0
    def testGetRecentUserActivityForQuery(self):
        """
        L{FacadeRecentActivityMixin.getRecentUserActivityForQuery} returns a
        C{dict} with information about the recent tag values by the users whose
        objects are returned by the given query.
        """
        UserAPI().create([(u'user2', u'password', u'User',
                           u'*****@*****.**')])
        user2 = getUser(u'user2')

        objectID1 = uuid4()

        # Use commit() frequently to have different timestamps on each value.
        TagValueAPI(self.user).set({objectID1: {u'username/test': u'A'}})
        self.store.commit()
        TagValueAPI(user2).set({objectID1: {u'user2/test': u'B'}})
        self.store.commit()

        runDataImportHandler(self.client.url)

        expected = [{'about': None,
                     'id': str(objectID1),
                     'tag': u'user2/test',
                     'username': u'user2',
                     'value': u'B'},
                    {'about': None,
                     'id': str(objectID1),
                     'tag': u'username/test',
                     'username': u'username',
                     'value': u'A'}]

        with login(self.user.username, uuid4(), self.transact) as session:
            result = yield self.facade.getRecentUserActivityForQuery(
                session,
                u'fluiddb/users/username = "******" '
                'OR fluiddb/users/username = "******"')

            # Remove the creation times from the result.
            for item in result:
                del item['updated-at']

            self.assertEqual(expected, result)
    def testImportObjectWithMultipleValues(self):
        """The Data Import Handler import documents with multiple values."""
        objectID = self.objects.create()
        self.values.set({objectID: {
            u'user/tag1': u'string',
            u'user/tag2': 5,
            u'user/tag3': 5.5,
            u'user/tag4': True,
            u'user/tag5': None,
            u'user/tag6': {
                'mime-type': 'text/plain',
                'contents': 'file contents'}}})
        runDataImportHandler(self.client.url)
        yield self.assertQuery([objectID],
                               'user/tag1 = "string" and user/tag2 = 5 '
                               'and user/tag3 = 5.5 and user/tag4 = true')

        yield self.assertQuery([objectID],
                               'has user/tag1 and has user/tag2 '
                               'and has user/tag3 and has user/tag4 '
                               'and has user/tag5 and has user/tag6')
Exemple #25
0
    def testGetRecentActivityForQuery(self):
        """
        L{FacadeRecentActivityMixin.getRecentActivityForQuery} returns a
        C{dict} with information about the recent tag values on the objects
        returned by the given query.
        """
        tagValues = TagValueAPI(self.user)
        objectID1 = ObjectAPI(self.user).create(u'object1')

        # Use commit() frequently to have different timestamps on each value.
        self.store.commit()
        tagValues.set({objectID1: {u'user/following': u'A'}})
        self.store.commit()

        runDataImportHandler(self.client.url)

        expected = [{'about': u'object1',
                     'id': str(objectID1),
                     'tag': u'user/following',
                     'username': u'username',
                     'value': u'A'},
                    {'about': u'object1',
                     'id': str(objectID1),
                     'tag': u'fluiddb/about',
                     'username': u'fluiddb',
                     'value': u'object1'}]

        with login(self.user.username, uuid4(), self.transact) as session:
            result = yield self.facade.getRecentActivityForQuery(
                session, u'has user/following')

            # Remove the creation times from the result.
            for item in result:
                del item['updated-at']

            self.assertEqual(expected, result)
Exemple #26
0
    def testGetRecentUserActivityForQueryWithObjectsNotUsers(self):
        """
        L{FacadeRecentActivityMixin.getRecentUserActivityForQuery} returns an
        empty result if the objects returned by the query are not users.
        """
        tagValues = TagValueAPI(self.user)
        objectID1 = ObjectAPI(self.user).create(u'object1')

        # Use commit() frequently to have different timestamps on each value.
        self.store.commit()
        tagValues.set({objectID1: {u'user/following': u'A'}})
        self.store.commit()

        runDataImportHandler(self.client.url)

        with login(self.user.username, uuid4(), self.transact) as session:
            result = yield self.facade.getRecentUserActivityForQuery(
                session, u'has user/following')

            # Remove the creation times from the result.
            for item in result:
                del item['updated-at']

            self.assertEqual([], result)