예제 #1
0
    def setUp(self):
        self.label = 'test'
        self.schema = {
            'test1': {'type': 'integer'},
            'test2': {'type': 'string'},
        }
        self.data = (fake_node() for _ in range(20))

        graph = Mock()
        graph.find = Mock(
            side_effect=lambda label, limit: (fake_node() for _ in range(limit is None and 4 or min(4, limit))))
        graph.node = Mock(side_effect=lambda i: fake_node())
        graph.pull = Mock()
        graph.push = Mock()
        graph.create = Mock(side_effect=lambda *e: (fake_node() for _ in range(len(e))))
        graph.delete = Mock(side_effect=lambda *e: e)

        self.r = GraphEntityRepository(self.label, self.schema)
        self.r._g = graph
예제 #2
0
class GraphEntityRepositoryTest(TestCase):
    def setUp(self):
        self.label = 'test'
        self.schema = {
            'test1': {'type': 'integer'},
            'test2': {'type': 'string'},
        }
        self.data = (fake_node() for _ in range(20))

        graph = Mock()
        graph.find = Mock(
            side_effect=lambda label, limit: (fake_node() for _ in range(limit is None and 4 or min(4, limit))))
        graph.node = Mock(side_effect=lambda i: fake_node())
        graph.pull = Mock()
        graph.push = Mock()
        graph.create = Mock(side_effect=lambda *e: (fake_node() for _ in range(len(e))))
        graph.delete = Mock(side_effect=lambda *e: e)

        self.r = GraphEntityRepository(self.label, self.schema)
        self.r._g = graph

    @parameterized.expand([
        (0, None, 4),
        (2, None, 2),
        (2, 2, 2),
        (0, 10, 4),
        (2, 10, 2),
    ])
    def test_all(self, skip, limit, expected_length):
        actual = self.r.all(skip, limit)

        self.r._g.find.assert_called_once_with(self.label, limit=limit and skip + limit or None)

        actual = list(actual)
        self.assertEqual(len(actual), expected_length)

    def test_find(self):
        identities = [1, 2, 3]
        actual = self.r.find(identities)

        self.assertEqual(self.r._g.node.call_count, len(identities))
        self.assertTrue(self.r._g.pull.called)
        self.assertEqual(len(actual), len(identities))

    def test_find_nonexistent_nodes(self):
        identities = [1, 2, 3]
        self.r._g.pull = Mock(side_effect=py2neo.GraphError)

        with self.assertRaises(errors.NotFoundError):
            self.r.find(identities)

    @parameterized.expand([
        (0, None, 4),
        (0, 2, 2),
        (2, 2, 2),
        (0, 10, 4),
        (2, 10, 2),
    ])
    def test_where(self, skip, limit, expected_length):
        self.r._g.find = Mock(
            side_effect=lambda p, q, r, limit=None: (fake_node() for _ in range(limit is None and 4 or min(limit, 4))))

        actual = self.r.where(test1=10, skip=skip, limit=limit)

        self.assertIsInstance(actual, list)
        self.assertEqual(len(actual), expected_length)

    def test_where_identity(self):
        actual = self.r.where(_id=10)

        self.assertIsInstance(actual, list)
        self.assertEqual(len(actual), 1)

    def test_where_raises_error_with_multiple_keys(self):
        with self.assertRaises(ValueError):
            self.r.where(test1=10, test2='test')

    def test_create(self):
        data = [fake_node().properties]

        actual = self.r.create(data)

        self.assertTrue(self.r._g.create.called)

        self.assertIsInstance(actual, list)
        self.assertEqual(len(actual), 1)

    def test_update(self):
        n = fake_node()
        data = [n.properties]
        data[0]['_id'] = n._id

        actual = self.r.update(data)

        self.assertTrue(self.r._g.push.called)

        self.assertIsInstance(actual, list)
        self.assertEqual(len(actual), 1)

    def test_delete(self):
        entities = [{'_id': d._id} for d in self.data]
        actual = self.r.delete(entities)

        self.assertTrue(self.r._g.delete.called)

        self.assertIsInstance(actual, list)
        self.assertEqual(len(actual), len(entities))