Skip to content

Commit 3a8f2ad

Browse files
committed
fix tavern test codes
1 parent 42ea0f1 commit 3a8f2ad

76 files changed

Lines changed: 3431 additions & 1534 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

test/tavern/create_item_type_template.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,10 @@ def create_template(json):
163163
text_type = ['text', 'textarea', 'select', 'radios']
164164
result = {}
165165
for k, v in json.items():
166-
if v.get('title') == 'Identifier Registration'\
167-
or v.get('title').startswith('Persistent Identifier')\
168-
or v.get('title') == 'File Information':
166+
if v.get('title') \
167+
and (v.get('title') == 'Identifier Registration'\
168+
or v.get('title').startswith('Persistent Identifier')\
169+
or v.get('title') == 'File Information'):
169170
continue
170171
if v.get('format'):
171172
if v.get('format') == 'datetime':
@@ -210,7 +211,10 @@ def create_random_template(json):
210211
result = {}
211212
has_uri = False
212213
for k, v in json.items():
213-
if v.get('title') == 'Identifier Registration' or v.get('title').startswith('Persistent Identifier') or v.get('title') == 'File Information':
214+
if v.get('title') \
215+
and (v.get('title') == 'Identifier Registration' \
216+
or v.get('title').startswith('Persistent Identifier') \
217+
or v.get('title') == 'File Information'):
214218
continue
215219
if v.get('format'):
216220
if v.get('format') == 'datetime':

test/tavern/generator/json/generate_json.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,11 @@ def generate_semi_pair(keys, pairs, properties, number):
359359
dict: The semi-pair of values.
360360
"""
361361
result = {}
362+
if not pairs:
363+
raise ValueError("The 'pairs' list is empty.")
362364
for i in range(len(keys)):
365+
if i >= len(pairs[number % len(pairs)]):
366+
raise IndexError(f"Index {i} is out of range for 'pairs' element with length {len(pairs[number % len(pairs)])}.")
363367
result[keys[i]] = pairs[number % len(pairs)][i]
364368
if not result[keys[i]] and mode > 1:
365369
result[keys[i]] = pairs[number % len(pairs) + 1][i]

test/tavern/generator/json/generate_prepare_index.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def create_query(self):
7878

7979

8080
def create_index(
81-
depth, num, current_level = 1, parent_id = 0, before_id = 0
81+
depth, num, current_level = 1, parent_id = 0, before_id = 0, adjust_position = -1
8282
):
8383
"""Recursively create a list of Index instances.
8484
@@ -88,6 +88,7 @@ def create_index(
8888
current_level(int, optional): Current level in the hierarchy. Defaults to 1.
8989
parent_id(int, optional): Parent index ID. Defaults to 0.
9090
before_id(int, optional): ID of the last created index. Defaults to 0.
91+
adjust_position(int, optional): Adjustment for the position value. Defaults to -1.
9192
9293
Returns:
9394
list[Index]: List of created Index instances.
@@ -101,7 +102,7 @@ def create_index(
101102
params = {
102103
"id": id,
103104
"parent": parent_id,
104-
"position": i + 2,
105+
"position": i + adjust_position,
105106
"index_name": f"Index_L{current_level}_N{i}",
106107
"index_name_english": f"Index_L{current_level}_N{i}_EN",
107108
"index_link_name": f"Index_L{current_level}_N{i}_Link",
@@ -122,7 +123,7 @@ def main(hierarchy_depth, num_indices_per_level):
122123
hierarchy_depth(int): Depth of the index hierarchy.
123124
num_indices_per_level(int): Number of indices per level.
124125
"""
125-
indices = create_index(hierarchy_depth, num_indices_per_level, before_id=100)
126+
indices = create_index(hierarchy_depth, num_indices_per_level, before_id=100, adjust_position=2)
126127

127128
with open("prepare_data/prepare_index.sql", "w", encoding="utf-8") as f:
128129
query = [index.create_query() for index in indices]

test/tavern/generator/json/generate_request_body.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,10 +540,18 @@ def create_error_files(required_types, item_type_id, output_dir):
540540
}
541541
save_body(body_noid, output_dir, f"mapping_noid_{mapping_type}.json")
542542

543+
duplicate_output_dir = output_dir.replace("error", "duplicate")
544+
mapping = {}
545+
if os.path.exists(duplicate_output_dir):
546+
duplicate_files = [f for f in os.listdir(duplicate_output_dir) if f.endswith(".json")]
547+
if duplicate_files:
548+
with open(os.path.join(duplicate_output_dir, duplicate_files[0]), "r", encoding="utf-8") as f:
549+
duplicate_data = json.load(f)
550+
mapping = duplicate_data.get("mapping", {})
543551
# missing mapping_type key
544552
body_noid = {
545553
"item_type_id": item_type_id,
546-
"mapping": {}
554+
"mapping": mapping
547555
}
548556
save_body(body_noid, output_dir, f"mapping_no_mapping_type.json")
549557

@@ -632,6 +640,8 @@ def set_db_keys(k):
632640
else:
633641
return (4, k)
634642
db_item_keys = sorted(list(mapping_raw.keys()), key=set_db_keys)
643+
if meta_ids and len(meta_ids) == 2:
644+
db_item_keys = [id for id in meta_ids if id in db_item_keys] + [k for k in db_item_keys if k not in meta_ids]
635645

636646
for role in test_roles:
637647
print(f"{role}のテストデータの生成を開始します。")

test/tavern/helper/common/item_create_helper.py

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ def create_item(
3131
is_doi=False,
3232
prepare_edit=False,
3333
id=2000001,
34+
replace_title=True,
3435
):
3536
"""Create items based on the provided creation information.
3637
@@ -44,6 +45,7 @@ def create_item(
4445
is_doi(bool, optional): Boolean indicating whether to assign a DOI to the item.
4546
prepare_edit(bool, optional): Boolean indicating whether to prepare the item for editing after creation.
4647
id(int, optional): Optional ID to assign to the created item.
48+
replace_title(bool, optional): Boolean indicating whether to replace the title of the item.
4749
4850
Raises:
4951
Exception: If any step in the item creation process fails.
@@ -63,18 +65,21 @@ def create_item(
6365
with open(create_info["data_file"], "r") as f:
6466
data = json.loads(f.read())
6567

66-
url = data[create_info["file_key"]][0]["url"]["url"]
67-
replaced_url = url.replace("{id}", str(id))
68-
data[create_info["file_key"]][0]["url"]["url"] = replaced_url
69-
70-
title_key = create_info["title_key"].split(".")
71-
title = data[title_key[0]][int(title_key[1])][title_key[2]]
72-
replaced_title = title + f"_{id}"
73-
data[title_key[0]][int(title_key[1])][title_key[2]] = replaced_title
74-
75-
identifier = data[create_info["identifier_key"]][0]["subitem_identifier_uri"]
76-
replaced_identifier = identifier + f"_{id}"
77-
data[create_info["identifier_key"]][0]["subitem_identifier_uri"] = replaced_identifier
68+
if create_info.get("file_key") and data.get(create_info["file_key"]) is not None:
69+
url = data[create_info["file_key"]][0]["url"]["url"]
70+
replaced_url = url.replace("{id}", str(id))
71+
data[create_info["file_key"]][0]["url"]["url"] = replaced_url
72+
73+
if replace_title:
74+
title_key = create_info["title_key"].split(".")
75+
title = data[title_key[0]][int(title_key[1])][title_key[2]]
76+
replaced_title = title + f"_{id}"
77+
data[title_key[0]][int(title_key[1])][title_key[2]] = replaced_title
78+
79+
if create_info.get("identifier_key") and data.get(create_info["identifier_key"]) is not None:
80+
identifier = data[create_info["identifier_key"]][0]["subitem_identifier_uri"]
81+
replaced_identifier = identifier + f"_{id}"
82+
data[create_info["identifier_key"]][0]["subitem_identifier_uri"] = replaced_identifier
7883

7984
for _ in range(creation_count):
8085
# create activity

test/tavern/helper/common/item_import_helper.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@
77
from box import Box
88

99

10-
def import_item(response, host, file_path, target_index):
10+
def import_item(response, host, file_path, target_index, csrf_token):
1111
"""Import item via admin API.
1212
1313
Args:
1414
response(Response): Response object from previous request to get headers.
1515
host(str): Host URL.
1616
file_path(str): Path to the file to be imported.
1717
target_index(int): Target index ID to replace in the import data.
18+
csrf_token(str): CSRF token for authentication.
1819
1920
Returns:
2021
Box: A Box object containing import task details.
@@ -23,7 +24,7 @@ def import_item(response, host, file_path, target_index):
2324
header = {
2425
"Referer": host,
2526
"Cookie": request_headers.get("Cookie", ""),
26-
"X-CSRFToken": request_headers.get("X-CSRFToken", ""),
27+
"X-CSRFToken": csrf_token,
2728
}
2829

2930
session = requests.Session()
@@ -38,12 +39,10 @@ def import_item(response, host, file_path, target_index):
3839
# Get check status
3940
while True:
4041
check_result = get_check_status(host, session, check_import_task_id)
41-
42-
if check_result["end_date"]:
42+
if check_result.get("end_date"):
4343
break
4444
sleep(1)
4545

46-
print("Import Check Result:", check_result)
4746
# Import
4847
import_response = start_import(
4948
host, session, check_result["data_path"], check_result["list_record"]

test/tavern/helper/common/request_helper.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ def request_create_validate_param(data, file_metadata=None):
1414
item_id (str): item id
1515
data (dict): register data
1616
"""
17+
if isinstance(data, str):
18+
data = json.loads(data)
1719
item_id = data['$schema'].split('/')[-1]
1820
params = {
1921
'item_id': item_id,
@@ -22,10 +24,8 @@ def request_create_validate_param(data, file_metadata=None):
2224
if file_metadata is not None:
2325
metadata = json.loads(file_metadata)
2426
keys = list(metadata.keys())
25-
for key, value in metadata[keys[0]][0].items():
26-
if key not in params['data'][keys[0]][0]:
27-
params['data'][keys[0]][0][key] = value
28-
print(params['data'][keys[0]])
27+
if keys[0] not in params['data'].keys():
28+
params['data'][keys[0]] = metadata[keys[0]]
2929
return params
3030

3131

@@ -98,9 +98,8 @@ def request_create_save_param(data, url=None, file_upload_info=None, file_metada
9898
if file_metadata is not None:
9999
metadata = json.loads(file_metadata)
100100
keys = list(metadata.keys())
101-
for key, value in metadata[keys[0]][0].items():
102-
if key not in params['metainfo'][keys[0]][0]:
103-
params['metainfo'][keys[0]][0][key] = value
101+
if keys[0] not in params['metainfo'].keys():
102+
params['metainfo'][keys[0]] = metadata[keys[0]]
104103
return params
105104

106105
def request_create_deposits_items_param(data=None):
@@ -159,7 +158,7 @@ def request_create_deposits_redirect_param(data, title_key, file_metadata=None):
159158
'$schema': data['$schema'],
160159
'lang': 'ja',
161160
'pubdate': data['pubdate'],
162-
'shared_user_id': data['shared_user_id'],
161+
'shared_user_ids': data['shared_user_ids'],
163162
'title': title
164163
}
165164

test/tavern/helper/common/response_helper.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from datetime import datetime, timezone
22
import json
3+
import os
34
import random
45
import string
56
from urllib.parse import urlparse
@@ -247,7 +248,10 @@ def response_save_url_described_in_email(_, target, save_key):
247248
Raises:
248249
ValueError: If no URL is found in the email file.
249250
"""
250-
with open('mail/' + target) as f:
251+
target_folder = f'mail/{target}/new'
252+
files = [f for f in os.listdir(target_folder) if os.path.isfile(os.path.join(target_folder, f))]
253+
files.sort(reverse=True)
254+
with open(os.path.join(target_folder, files[0]), 'r') as f:
251255
lines = f.readlines()
252256
url = ''
253257
for line in lines:
@@ -362,6 +366,13 @@ def response_save_register_data_with_change(_, file_name, key_dict_file, change_
362366
elif change_type == 6:
363367
# change creator name
364368
register_data[creator_key][0]['creatorNames'][0]['creatorName'] = 'たかはし さぶろう'
369+
register_data[creator_key][0]['nameIdentifiers'] = [
370+
{
371+
"nameIdentifier": "1",
372+
"nameIdentifierScheme": "WEKO"
373+
}
374+
]
375+
del register_data[creator_key][1]
365376

366377
return Box({'register_data': json.dumps(register_data)})
367378

test/tavern/helper/verify_database_helper.py renamed to test/tavern/helper/common/verify_database_helper.py

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,10 @@
11
from datetime import datetime, timedelta
22
import json
33
import os
4-
import psycopg2
54

6-
from helper.config import DATABASE, REPLACEMENT_DECISION_STRING
5+
from helper.config import REPLACEMENT_DECISION_STRING
76

87

9-
def connect_db():
10-
"""Connect to database
11-
12-
Args:
13-
None
14-
15-
Returns:
16-
psycopg2.extensions.connection: connection to database
17-
"""
18-
conn = psycopg2.connect(
19-
dbname=DATABASE['dbname'],
20-
user=DATABASE['user'],
21-
password=DATABASE['password'],
22-
host=DATABASE['host'],
23-
port=DATABASE['port'],
24-
)
25-
return conn
26-
278
def compare_db_data(cursor, folder_path, replace_params = {}, type_conversion_params = {}, datetime_columns=[]):
289
"""Compare data in database with data in excel file
2910

test/tavern/helper/index/data_transformation_helper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def get_parents(cursor, index_id):
6363
"position": index_data["position"],
6464
"public_date": datetime.strftime(
6565
index_data["public_date"], "%Y-%m-%dT%H:%M:%S")
66-
if index_data["public_date"] else "",
66+
if index_data["public_date"] else None,
6767
"public_state": index_data["public_state"],
6868
"recursive_coverpage_check": index_data["recursive_coverpage_check"],
6969
"settings": {

0 commit comments

Comments
 (0)