def test_constructor(self, name, age, archived, child_field):
        document = model.Document(name, age, archived, child_field)

        self.assertIsNotNone(document.id)
        self.assertEqual(document.name, name)
        self.assertEqual(document.age, age)
        self.assertEqual(document.archived, archived)
        self.assertEqual(document.child_field, child_field)
    def test_remove_child_field(self):
        document = self.document_repo._save(
            model.Document(name="Anakin Skywalker",
                           age=99,
                           child_field=[
                               model.ChildField(name="Luke Skywalker",
                                                date=model.Date(month=8,
                                                                year=2018))
                           ]))

        self.document_repo.set_data([document])

        REMOVE_CHILD_FIELD_MUTATION = """
        mutation {
          removeChildField(removeChildField:{
            documentId: "%s"
            childFieldId: "%s"
          })
          {
            __typename
              ... on Document {
                id
                name
                age
                childField{
                  name
                  date{
                    month
                    year
                  }
                }
              }
              ... on Errors{
                errors{
                  field
                  messages
                }
              }
            }
        } 
        """ % (document.id, document.child_field[0].id)

        result = self.execute(REMOVE_CHILD_FIELD_MUTATION)
        self.assertEqual(result.errors, None)
        data = to_dict(result.data)['removeChildField']
        print(data)
        child_fields = data['childField']
        child_fields_ids = [a['id'] for a in child_fields]
        self.assertTrue(document.child_field[0].id not in child_fields_ids)
    async def create(self,
                     name: str,
                     age: Optional[int] = None,
                     archived: Optional[bool] = None,
                     child_field: Optional[List] = None) -> model.Document:
        if (await self.find_by_name(name)) is not None:
            raise RepoError({'name': ['already exists']})

        result = model.Document(
            name=name,
            age=age,
            archived=archived,
            child_field=child_field or [],
        )
        self.data.append(result)
        return result
Beispiel #4
0
    async def create(self,
                     name: str,
                     age: Optional[int] = None,
                     archived: Optional[bool] = None,
                     child_field: Optional[List] = None) -> model.Document:
        document = model.Document(name=name,
                                  age=age,
                                  archived=archived,
                                  child_field=child_field or [])
        try:
            res = await self.collection.insert_one(document.to_bson())
        except pymongo.errors.DuplicateKeyError:
            raise RepoError({'name': ['already exists']})

        result = await self.find_by_id(str(res.inserted_id))
        self.emit("DocumentCreated", result)
        return result
    def test_get_all_documents(self):
        #set up test data
        document = self.document_repo._save(
            model.Document(name="Anakin Skywalker",
                           age=99,
                           child_field=[
                               model.ChildField(name="Luke Skywalker",
                                                date=model.Date(month=8,
                                                                year=2018))
                           ]))

        documents = [document]
        # self.document_repo.set_data(documents)

        result = self.execute(self.DOCUMENTS_QUERY)

        self.assertEqual(result.errors, None)

        self.assertEqual(
            to_dict(result.data), {
                'documents': [{
                    'id':
                    d.id,
                    'name':
                    d.name,
                    'age':
                    d.age,
                    'childField': [{
                        'name': "Luke Skywalker",
                        'date': {
                            'month': 8,
                            'year': 2018
                        }
                    }]
                } for d in documents]
            })
    def test_edit_child_field(self):
        document = self.document_repo._save(
            model.Document(name="Anakin Skywalker",
                           age=99,
                           child_field=[
                               model.ChildField(name="Luke Skywalker",
                                                date=model.Date(month=8,
                                                                year=2018))
                           ]))

        self.document_repo.set_data([document])

        EDIT_CHILD_FIELD_MUTATION = """
        mutation {
          editChildField(editChildField:{
            documentId: "%s"
            childField:{
              id: "%s"
              name: "Yoda"
              date: {
                month: 5,
                year: 2010
              }
            }
          })
          {
          __typename
            ... on Document {
              id
              name
              age
              childField{
                name
                date{
                  month
                  year
                }
              }
            }
            ... on Errors{
              errors{
              field
              messages
              } 
            }
          }
        }
        
        """ % (document.id, document.child_field[0].id)

        result = self.execute(EDIT_CHILD_FIELD_MUTATION)
        self.assertEqual(result.errors, None)
        self.assertEqual(
            to_dict(result.data), {
                'editChildField': {
                    '__typename':
                    'Document',
                    'id':
                    document.id,
                    'name':
                    document.name,
                    'age':
                    document.age,
                    'childField': [{
                        'name': 'Yoda',
                        'date': {
                            'month': 5,
                            'year': 2010
                        }
                    }]
                }
            })