File: test_utils.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 (133 lines) | stat: -rw-r--r-- 4,528 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
from io import BytesIO

from strawberry.file_uploads.utils import replace_placeholders_with_files


def test_does_deep_copy():
    operations = {
        "query": "mutation($file: Upload!) { upload_file(file: $file) { id } }",
        "variables": {"file": None},
    }
    files_map = {}
    files = {}

    result = replace_placeholders_with_files(operations, files_map, files)
    assert result == operations
    assert result is not operations


def test_empty_files_map():
    operations = {
        "query": "mutation($files: [Upload!]!) { upload_files(files: $files) { id } }",
        "variables": {"files": [None, None]},
    }
    files_map = {}
    files = {"0": BytesIO(), "1": BytesIO()}

    result = replace_placeholders_with_files(operations, files_map, files)
    assert result == operations


def test_empty_operations_paths():
    operations = {
        "query": "mutation($files: [Upload!]!) { upload_files(files: $files) { id } }",
        "variables": {"files": [None, None]},
    }
    files_map = {"0": [], "1": []}
    files = {"0": BytesIO(), "1": BytesIO()}

    result = replace_placeholders_with_files(operations, files_map, files)
    assert result == operations


def test_single_file_in_single_location():
    operations = {
        "query": "mutation($file: Upload!) { upload_file(file: $file) { id } }",
        "variables": {"file": None},
    }
    files_map = {"0": ["variables.file"]}
    file0 = BytesIO()
    files = {"0": file0}

    result = replace_placeholders_with_files(operations, files_map, files)
    assert result["query"] == operations["query"]
    assert result["variables"]["file"] == file0


def test_single_file_in_multiple_locations():
    operations = {
        "query": "mutation($a: Upload!, $b: Upload!) { pair(a: $a, b: $a) { id } }",
        "variables": {"a": None, "b": None},
    }
    files_map = {"0": ["variables.a", "variables.b"]}
    file0 = BytesIO()
    files = {"0": file0}

    result = replace_placeholders_with_files(operations, files_map, files)
    assert result["query"] == operations["query"]
    assert result["variables"]["a"] == file0
    assert result["variables"]["b"] == file0


def test_file_list():
    operations = {
        "query": "mutation($files: [Upload!]!) { upload_files(files: $files) { id } }",
        "variables": {"files": [None, None]},
    }
    files_map = {"0": ["variables.files.0"], "1": ["variables.files.1"]}
    file0 = BytesIO()
    file1 = BytesIO()
    files = {"0": file0, "1": file1}

    result = replace_placeholders_with_files(operations, files_map, files)
    assert result["query"] == operations["query"]
    assert result["variables"]["files"][0] == file0
    assert result["variables"]["files"][1] == file1


def test_single_file_reuse_in_list():
    operations = {
        "query": "mutation($a: [Upload!]!, $b: Upload!) { mixed(a: $a, b: $b) { id } }",
        "variables": {"a": [None, None], "b": None},
    }
    files_map = {"0": ["variables.a.0"], "1": ["variables.a.1", "variables.b"]}
    file0 = BytesIO()
    file1 = BytesIO()
    files = {"0": file0, "1": file1}

    result = replace_placeholders_with_files(operations, files_map, files)
    assert result["query"] == operations["query"]
    assert result["variables"]["a"][0] == file0
    assert result["variables"]["a"][1] == file1
    assert result["variables"]["b"] == file1


def test_using_single_file_multiple_times_in_same_list():
    operations = {
        "query": "mutation($files: [Upload!]!) { upload_files(files: $files) { id } }",
        "variables": {"files": [None, None]},
    }
    files_map = {"0": ["variables.files.0", "variables.files.1"]}
    file0 = BytesIO()
    files = {"0": file0}

    result = replace_placeholders_with_files(operations, files_map, files)
    assert result["query"] == operations["query"]
    assert result["variables"]["files"][0] == file0
    assert result["variables"]["files"][1] == file0


def test_deep_nesting():
    operations = {
        "query": "mutation($list: [ComplexInput!]!) { mutate(list: $list) { id } }",
        "variables": {"a": [{"files": [None, None]}]},
    }
    files_map = {"0": ["variables.a.0.files.0"], "1": ["variables.a.0.files.1"]}
    file0 = BytesIO()
    file1 = BytesIO()
    files = {"0": file0, "1": file1}

    result = replace_placeholders_with_files(operations, files_map, files)
    assert result["query"] == operations["query"]
    assert result["variables"]["a"][0]["files"][0] == file0
    assert result["variables"]["a"][0]["files"][1] == file1