|
41 | 41 | TEST_IMAGE_PATH = os.path.join(os.path.dirname(__file__), "../fields/mongoengine.png") |
42 | 42 |
|
43 | 43 |
|
44 | | -class TestInstance(MongoDBTestCase): |
| 44 | +class TestDocumentInstance(MongoDBTestCase): |
45 | 45 | def setUp(self): |
46 | 46 | class Job(EmbeddedDocument): |
47 | 47 | name = StringField() |
@@ -3338,19 +3338,19 @@ class Person(Document): |
3338 | 3338 |
|
3339 | 3339 | # worker1.job should be equal to the job used originally to create the |
3340 | 3340 | # document. |
3341 | | - self.assertEqual(worker1.job, worker.job) |
| 3341 | + assert worker1.job == worker.job |
3342 | 3342 |
|
3343 | 3343 | # worker1.job should be equal to a newly created Job EmbeddedDocument |
3344 | 3344 | # using either the Boss object or his ID. |
3345 | | - self.assertEqual(worker1.job, Job(boss=boss, boss_dbref=boss)) |
3346 | | - self.assertEqual(worker1.job, Job(boss=boss.id, boss_dbref=boss.id)) |
| 3345 | + assert worker1.job == Job(boss=boss, boss_dbref=boss) |
| 3346 | + assert worker1.job == Job(boss=boss.id, boss_dbref=boss.id) |
3347 | 3347 |
|
3348 | 3348 | # The above equalities should also hold after worker1.job.boss has been |
3349 | 3349 | # fetch()ed. |
3350 | 3350 | worker1.job.boss.fetch() |
3351 | | - self.assertEqual(worker1.job, worker.job) |
3352 | | - self.assertEqual(worker1.job, Job(boss=boss, boss_dbref=boss)) |
3353 | | - self.assertEqual(worker1.job, Job(boss=boss.id, boss_dbref=boss.id)) |
| 3351 | + assert worker1.job == worker.job |
| 3352 | + assert worker1.job == Job(boss=boss, boss_dbref=boss) |
| 3353 | + assert worker1.job == Job(boss=boss.id, boss_dbref=boss.id) |
3354 | 3354 |
|
3355 | 3355 | def test_dbref_equality(self): |
3356 | 3356 | class Test2(Document): |
@@ -3617,6 +3617,51 @@ class A(Document): |
3617 | 3617 | assert b._instance == a |
3618 | 3618 | assert idx == 2 |
3619 | 3619 |
|
| 3620 | + def test_updating_listfield_manipulate_list(self): |
| 3621 | + class Company(Document): |
| 3622 | + name = StringField() |
| 3623 | + employees = ListField(field=DictField()) |
| 3624 | + |
| 3625 | + Company.drop_collection() |
| 3626 | + |
| 3627 | + comp = Company(name="BigBank", employees=[{"name": "John"}]) |
| 3628 | + comp.save() |
| 3629 | + comp.employees.append({"name": "Bill"}) |
| 3630 | + comp.save() |
| 3631 | + |
| 3632 | + stored_comp = get_as_pymongo(comp) |
| 3633 | + self.assertEqual( |
| 3634 | + stored_comp, |
| 3635 | + { |
| 3636 | + "_id": comp.id, |
| 3637 | + "employees": [{"name": "John"}, {"name": "Bill"}], |
| 3638 | + "name": "BigBank", |
| 3639 | + }, |
| 3640 | + ) |
| 3641 | + |
| 3642 | + comp = comp.reload() |
| 3643 | + comp.employees[0]["color"] = "red" |
| 3644 | + comp.employees[-1]["color"] = "blue" |
| 3645 | + comp.employees[-1].update({"size": "xl"}) |
| 3646 | + comp.save() |
| 3647 | + |
| 3648 | + assert len(comp.employees) == 2 |
| 3649 | + assert comp.employees[0] == {"name": "John", "color": "red"} |
| 3650 | + assert comp.employees[1] == {"name": "Bill", "size": "xl", "color": "blue"} |
| 3651 | + |
| 3652 | + stored_comp = get_as_pymongo(comp) |
| 3653 | + self.assertEqual( |
| 3654 | + stored_comp, |
| 3655 | + { |
| 3656 | + "_id": comp.id, |
| 3657 | + "employees": [ |
| 3658 | + {"name": "John", "color": "red"}, |
| 3659 | + {"size": "xl", "color": "blue", "name": "Bill"}, |
| 3660 | + ], |
| 3661 | + "name": "BigBank", |
| 3662 | + }, |
| 3663 | + ) |
| 3664 | + |
3620 | 3665 | def test_falsey_pk(self): |
3621 | 3666 | """Ensure that we can create and update a document with Falsey PK.""" |
3622 | 3667 |
|
@@ -3693,13 +3738,13 @@ class Jedi(Document): |
3693 | 3738 | value = u"I_should_be_a_dict" |
3694 | 3739 | coll.insert_one({"light_saber": value}) |
3695 | 3740 |
|
3696 | | - with self.assertRaises(InvalidDocumentError) as cm: |
| 3741 | + with pytest.raises(InvalidDocumentError) as exc_info: |
3697 | 3742 | list(Jedi.objects) |
3698 | 3743 |
|
3699 | | - self.assertEqual( |
3700 | | - str(cm.exception), |
3701 | | - "Invalid data to create a `Jedi` instance.\nField 'light_saber' - The source SON object needs to be of type 'dict' but a '%s' was found" |
3702 | | - % type(value), |
| 3744 | + assert str( |
| 3745 | + exc_info.value |
| 3746 | + ) == "Invalid data to create a `Jedi` instance.\nField 'light_saber' - The source SON object needs to be of type 'dict' but a '%s' was found" % type( |
| 3747 | + value |
3703 | 3748 | ) |
3704 | 3749 |
|
3705 | 3750 |
|
|
0 commit comments