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
|