File: test_dirty_equals.py

package info (click to toggle)
python-inline-snapshot 0.32.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,900 kB
  • sloc: python: 11,339; makefile: 40; sh: 36
file content (235 lines) | stat: -rw-r--r-- 5,126 bytes parent folder | download
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
import pytest

from inline_snapshot._inline_snapshot import snapshot
from inline_snapshot.testing._example import Example


@pytest.mark.xfail
def test_dirty_equals_repr():
    Example(
        """\
from inline_snapshot import snapshot
from dirty_equals import IsStr

def test_something():
    assert [IsStr()] == snapshot()
    """
    ).run_inline(
        ["--inline-snapshot=create"],
        changed_files=snapshot({}),
        raises=snapshot(
            """\
UsageError:
inline-snapshot uses `copy.deepcopy` to copy objects,
but the copied object is not equal to the original one:

original: [HasRepr(IsStr, '< type(obj) can not be compared with == >')]
copied:   [HasRepr(IsStr, '< type(obj) can not be compared with == >')]

Please fix the way your object is copied or your __eq__ implementation.
"""
        ),
    )


def test_compare_dirty_equals_twice() -> None:

    Example(
        """
from dirty_equals import IsStr
from inline_snapshot import snapshot

def test():
    for x in 'ab':
        assert x == snapshot(IsStr())
        assert [x,5] == snapshot([IsStr(),3])
        assert {'a':x,'b':5} == snapshot({'a':IsStr(),'b':3})

"""
    ).run_inline(
        ["--inline-snapshot=fix"],
        changed_files=snapshot(
            {
                "tests/test_something.py": """\

from dirty_equals import IsStr
from inline_snapshot import snapshot

def test():
    for x in 'ab':
        assert x == snapshot(IsStr())
        assert [x,5] == snapshot([IsStr(),5])
        assert {'a':x,'b':5} == snapshot({'a':IsStr(),'b':5})

"""
            }
        ),
    )


def test_dirty_equals_in_unused_snapshot() -> None:

    Example(
        """
from dirty_equals import IsStr
from inline_snapshot import snapshot,Is

snapshot([IsStr(),3])
snapshot((IsStr(),3))
snapshot({1:IsStr(),2:3})
snapshot({1+1:2})

t=(1,2)
d={1:2}
l=[1,2]
snapshot([Is(t),Is(d),Is(l)])

def test():
    pass

"""
    ).run_inline(
        ["--inline-snapshot=fix"],
        changed_files=snapshot({}),
    )


def test_now_like_dirty_equals():
    # test for cases like https://github.com/15r10nk/inline-snapshot/issues/116

    Example(
        """
from dirty_equals import DirtyEquals
from inline_snapshot import snapshot


def test_time():

    now = 5

    class Now(DirtyEquals):
        def equals(self, other):
            return other == now

    assert 5 == snapshot(Now())

    now = 6

    assert 5 == snapshot(Now()), "different time"
"""
    ).run_inline(
        ["--inline-snapshot=fix"],
        changed_files=snapshot({}),
        raises=snapshot(
            """\
AssertionError:
different time\
"""
        ),
    )


def test_dirty_equals_with_changing_args() -> None:

    Example(
        """\
from dirty_equals import IsInt
from inline_snapshot import snapshot

def test_number():

    for i in range(5):
        assert ["a",i] == snapshot(["e",IsInt(gt=i-1,lt=i+1)])

"""
    ).run_inline(
        ["--inline-snapshot=fix"],
        changed_files=snapshot(
            {
                "tests/test_something.py": """\
from dirty_equals import IsInt
from inline_snapshot import snapshot

def test_number():

    for i in range(5):
        assert ["a",i] == snapshot(["a",IsInt(gt=i-1,lt=i+1)])

"""
            }
        ),
    )


def test_is_now_without_approx() -> None:
    """Test that IsNow handler correctly removes 'approx' kwarg."""

    Example(
        """\
from datetime import datetime
from dirty_equals import IsNow
from inline_snapshot import snapshot

def test_time():
    assert datetime.now() == snapshot()
"""
    ).run_inline(
        ["--inline-snapshot=create"],
        changed_files=snapshot(
            {
                "tests/test_something.py": """\
from datetime import datetime
from dirty_equals import IsNow
from inline_snapshot import snapshot

def test_time():
    assert datetime.now() == snapshot(IsNow())
"""
            }
        ),
    )


def test_is_now_with_delta() -> None:
    """Test that IsNow handler works with custom delta parameter in customization."""

    Example(
        {
            "conftest.py": """\
from datetime import timedelta
from inline_snapshot.plugin import customize
from dirty_equals import IsNow

@customize
def is_now_with_tolerance(value):
    if value == IsNow(delta=timedelta(minutes=10)):
        return IsNow(delta=timedelta(minutes=10))
""",
            "test_something.py": """\
from datetime import datetime, timedelta
from inline_snapshot import snapshot

def test_time():
    # Compare a time from 5 minutes ago with snapshot
    past_time = datetime.now() - timedelta(minutes=5)
    assert past_time == snapshot()
""",
        }
    ).run_inline(
        ["--inline-snapshot=create"],
        changed_files=snapshot(
            {
                "test_something.py": """\
from datetime import datetime, timedelta
from inline_snapshot import snapshot

from dirty_equals import IsNow

def test_time():
    # Compare a time from 5 minutes ago with snapshot
    past_time = datetime.now() - timedelta(minutes=5)
    assert past_time == snapshot(IsNow(delta=timedelta(seconds=600)))
"""
            }
        ),
    ).run_inline()