File: test_specified_fields.py

package info (click to toggle)
django-dirtyfields 1.3.1-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 276 kB
  • sloc: python: 812; makefile: 168
file content (57 lines) | stat: -rw-r--r-- 1,750 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import pytest

from .models import TestModel, TestModelWithSpecifiedFields, TestModelWithM2MAndSpecifiedFields, TestModelWithSpecifiedFieldsAndForeignKey


@pytest.mark.django_db
def test_dirty_fields_on_model_with_specified_fields():
    tm = TestModelWithSpecifiedFields.objects.create()

    tm.boolean1 = False
    tm.boolean2 = False

    # boolean1 is tracked, boolean2 isn`t tracked
    assert tm.get_dirty_fields() == {'boolean1': True}


@pytest.mark.django_db
def test_dirty_fields_on_model_with_m2m_and_specified_fields():
    tm = TestModelWithM2MAndSpecifiedFields.objects.create()
    tm2 = TestModel.objects.create()

    tm.m2m1.add(tm2)
    tm.m2m2.add(tm2)

    # m2m1 is tracked, m2m2 isn`t tracked
    assert tm.get_dirty_fields(check_m2m={'m2m1': set([])}) == {'m2m1': set([tm2.id])}
    assert tm.get_dirty_fields(check_m2m={'m2m2': set([])}) == {}


@pytest.mark.django_db
def test_dirty_fields_on_model_with_specified_fields_can_save_when_non_tracked_field_is_modified():
    tm = TestModelWithSpecifiedFields.objects.create()

    tm.boolean1 = False
    tm.boolean2 = False

    tm.save(update_fields=["boolean2"])

    assert "boolean1" in tm._original_state
    assert "boolean2" not in tm._original_state


@pytest.mark.django_db
def test_dirty_fields_on_model_with_specified_fields_can_save_when_non_tracked_fk_field_is_modified():
    tm = TestModelWithSpecifiedFieldsAndForeignKey.objects.create()
    fk = TestModel.objects.create()
    tm.fk_field = fk
    tm.boolean1 = False
    tm.boolean2 = False

    tm.save(update_fields=["fk_field"])
    assert "fk_field" in tm._original_state

    tm.boolean2 = True
    tm.save()
    assert "fk_field" in tm._original_state
    assert "boolean2" not in tm._original_state