File: test_annotation.py

package info (click to toggle)
strawberry-graphql 0.306.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 18,176 kB
  • sloc: javascript: 178,052; python: 65,643; sh: 33; makefile: 25
file content (75 lines) | stat: -rw-r--r-- 1,637 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
import itertools
from enum import Enum
from typing import Optional, TypeVar

import pytest

import strawberry
from strawberry.annotation import StrawberryAnnotation
from strawberry.types.unset import UnsetType


class Bleh:
    pass


@strawberry.enum
class NumaNuma(Enum):
    MA = "ma"
    I = "i"  # noqa: E741
    A = "a"
    HI = "hi"


T = TypeVar("T")

types = [
    int,
    str,
    None,
    Optional[str],
    UnsetType,
    "int",
    T,
    Bleh,
    NumaNuma,
]


@pytest.mark.parametrize(
    ("type1", "type2"), itertools.combinations_with_replacement(types, 2)
)
def test_annotation_hash(type1: object | str, type2: object | str):
    annotation1 = StrawberryAnnotation(type1)
    annotation2 = StrawberryAnnotation(type2)
    assert (
        hash(annotation1) == hash(annotation2)
        if annotation1 == annotation2
        else hash(annotation1) != hash(annotation2)
    ), "Equal type must imply equal hash"


def test_eq_on_other_type():
    class Foo:  # noqa: PLW1641
        def __eq__(self, other):
            # Anything that is a strawberry annotation is equal to Foo
            return isinstance(other, StrawberryAnnotation)

    assert Foo() != object()
    assert object() != Foo()
    assert Foo() != 123 != Foo()
    assert Foo() != 123
    assert Foo() == StrawberryAnnotation(int)
    assert StrawberryAnnotation(int) == Foo()


def test_eq_on_non_annotation():
    assert StrawberryAnnotation(int) is not int
    assert StrawberryAnnotation(int) != 123


def test_set_anntation():
    annotation = StrawberryAnnotation(int)
    annotation.annotation = str

    assert annotation.annotation is str