proper test for merge fix for organization_id setting
This commit is contained in:
88
update_merger_expect.py
Normal file
88
update_merger_expect.py
Normal file
@ -0,0 +1,88 @@
|
||||
import json
|
||||
import re
|
||||
|
||||
# Read the test output
|
||||
output = """
|
||||
JSPG_SQL: INSERT INTO agreego."entity" ("created_at", "created_by", "id", "modified_at", "modified_by", "type") VALUES ('2026-03-10T00:00:00Z', '00000000-0000-0000-0000-000000000000', '734f0f6e-3408-4d18-a6d7-725400ff6b30', '2026-03-10T00:00:00Z', '00000000-0000-0000-0000-000000000000', 'person')
|
||||
JSPG_SQL: INSERT INTO agreego."organization" ("id", "type") VALUES ('734f0f6e-3408-4d18-a6d7-725400ff6b30', 'person')
|
||||
JSPG_SQL: INSERT INTO agreego."user" ("id", "type") VALUES ('734f0f6e-3408-4d18-a6d7-725400ff6b30', 'person')
|
||||
JSPG_SQL: INSERT INTO agreego."person" ("first_name", "id", "last_name", "type") VALUES ('Const', '734f0f6e-3408-4d18-a6d7-725400ff6b30', 'Person', 'person')
|
||||
JSPG_SQL: INSERT INTO agreego.change ("old", "new", entity_id, id, kind, modified_at, modified_by) VALUES (NULL, '{"first_name":"Const","last_name":"Person","type":"person"}', '734f0f6e-3408-4d18-a6d7-725400ff6b30', '7195460a-edff-4d0d-b137-c040616b9f27', 'create', '2026-03-10T00:00:00Z', '00000000-0000-0000-0000-000000000000')
|
||||
JSPG_SQL: INSERT INTO agreego."entity" ("created_at", "created_by", "id", "modified_at", "modified_by", "organization_id", "type") VALUES ('2026-03-10T00:00:00Z', '00000000-0000-0000-0000-000000000000', '369e92ac-41c5-4d43-9286-c004edb96e76', '2026-03-10T00:00:00Z', '00000000-0000-0000-0000-000000000000', 'parent-org-id', 'order')
|
||||
JSPG_SQL: INSERT INTO agreego."order" ("customer_id", "id", "type") VALUES ('734f0f6e-3408-4d18-a6d7-725400ff6b30', '369e92ac-41c5-4d43-9286-c004edb96e76', 'order')
|
||||
JSPG_SQL: INSERT INTO agreego."entity" ("created_at", "created_by", "id", "modified_at", "modified_by", "organization_id", "type") VALUES ('2026-03-10T00:00:00Z', '00000000-0000-0000-0000-000000000000', '48e91d8d-99ef-4f74-b2e6-c98f9501bb7a', '2026-03-10T00:00:00Z', '00000000-0000-0000-0000-000000000000', 'parent-org-id', 'order_line')
|
||||
JSPG_SQL: INSERT INTO agreego."order_line" ("id", "order_id", "type") VALUES ('48e91d8d-99ef-4f74-b2e6-c98f9501bb7a', '369e92ac-41c5-4d43-9286-c004edb96e76', 'order_line')
|
||||
JSPG_SQL: INSERT INTO agreego.change ("old", "new", entity_id, id, kind, modified_at, modified_by) VALUES (NULL, '{"order_id":"369e92ac-41c5-4d43-9286-c004edb96e76","organization_id":"parent-org-id","type":"order_line"}', '48e91d8d-99ef-4f74-b2e6-c98f9501bb7a', '5ab5c99b-926a-4878-98a7-c531859d2ebe', 'create', '2026-03-10T00:00:00Z', '00000000-0000-0000-0000-000000000000')
|
||||
JSPG_SQL: INSERT INTO agreego."entity" ("created_at", "created_by", "id", "modified_at", "modified_by", "organization_id", "type") VALUES ('2026-03-10T00:00:00Z', '00000000-0000-0000-0000-000000000000', 'b91b93b2-1f75-4be3-a731-88562d289997', '2026-03-10T00:00:00Z', '00000000-0000-0000-0000-000000000000', 'explicit-org-id', 'order_line')
|
||||
JSPG_SQL: INSERT INTO agreego."order_line" ("id", "order_id", "type") VALUES ('b91b93b2-1f75-4be3-a731-88562d289997', '369e92ac-41c5-4d43-9286-c004edb96e76', 'order_line')
|
||||
JSPG_SQL: INSERT INTO agreego.change ("old", "new", entity_id, id, kind, modified_at, modified_by) VALUES (NULL, '{"order_id":"369e92ac-41c5-4d43-9286-c004edb96e76","organization_id":"explicit-org-id","type":"order_line"}', 'b91b93b2-1f75-4be3-a731-88562d289997', 'ad35cf4e-d2de-4f87-aa3d-ec30101397ca', 'create', '2026-03-10T00:00:00Z', '00000000-0000-0000-0000-000000000000')
|
||||
JSPG_SQL: INSERT INTO agreego.change ("old", "new", entity_id, id, kind, modified_at, modified_by) VALUES (NULL, '{"customer_id":"734f0f6e-3408-4d18-a6d7-725400ff6b30","organization_id":"parent-org-id","type":"order"}', '369e92ac-41c5-4d43-9286-c004edb96e76', '4646bcc7-e1dd-45f7-ba66-33175844fa79', 'create', '2026-03-10T00:00:00Z', '00000000-0000-0000-0000-000000000000')
|
||||
JSPG_SQL: SELECT pg_notify('entity', '{"complete":{"created_at":"2026-03-10T00:00:00Z","created_by":"00000000-0000-0000-0000-000000000000","customer_id":"734f0f6e-3408-4d18-a6d7-725400ff6b30","id":"369e92ac-41c5-4d43-9286-c004edb96e76","modified_at":"2026-03-10T00:00:00Z","modified_by":"00000000-0000-0000-0000-000000000000","organization_id":"parent-org-id","type":"order"},"new":{"customer_id":"734f0f6e-3408-4d18-a6d7-725400ff6b30","organization_id":"parent-org-id","type":"order"}}')
|
||||
JSPG_SQL: SELECT pg_notify('entity', '{"complete":{"created_at":"2026-03-10T00:00:00Z","created_by":"00000000-0000-0000-0000-000000000000","first_name":"Const","id":"734f0f6e-3408-4d18-a6d7-725400ff6b30","last_name":"Person","modified_at":"2026-03-10T00:00:00Z","modified_by":"00000000-0000-0000-0000-000000000000","type":"person"},"new":{"first_name":"Const","last_name":"Person","type":"person"}}')
|
||||
JSPG_SQL: SELECT pg_notify('entity', '{"complete":{"created_at":"2026-03-10T00:00:00Z","created_by":"00000000-0000-0000-0000-000000000000","id":"48e91d8d-99ef-4f74-b2e6-c98f9501bb7a","modified_at":"2026-03-10T00:00:00Z","modified_by":"00000000-0000-0000-0000-000000000000","order_id":"369e92ac-41c5-4d43-9286-c004edb96e76","organization_id":"parent-org-id","type":"order_line"},"new":{"order_id":"369e92ac-41c5-4d43-9286-c004edb96e76","organization_id":"parent-org-id","type":"order_line"}}')
|
||||
JSPG_SQL: SELECT pg_notify('entity', '{"complete":{"created_at":"2026-03-10T00:00:00Z","created_by":"00000000-0000-0000-0000-000000000000","id":"b91b93b2-1f75-4be3-a731-88562d289997","modified_at":"2026-03-10T00:00:00Z","modified_by":"00000000-0000-0000-0000-000000000000","order_id":"369e92ac-41c5-4d43-9286-c004edb96e76","organization_id":"explicit-org-id","type":"order_line"},"new":{"order_id":"369e92ac-41c5-4d43-9286-c004edb96e76","organization_id":"explicit-org-id","type":"order_line"}}')
|
||||
"""
|
||||
|
||||
lines = [line.replace("JSPG_SQL: ", "").strip() for line in output.split("\n") if line.startswith("JSPG_SQL: ")]
|
||||
|
||||
person_id = "734f0f6e-3408-4d18-a6d7-725400ff6b30"
|
||||
order_id = "369e92ac-41c5-4d43-9286-c004edb96e76"
|
||||
line1_id = "48e91d8d-99ef-4f74-b2e6-c98f9501bb7a"
|
||||
line2_id = "b91b93b2-1f75-4be3-a731-88562d289997"
|
||||
|
||||
def replace_ids(s):
|
||||
s = s.replace(person_id, "{{uuid:person_id}}")
|
||||
s = s.replace(order_id, "{{uuid:order_id}}")
|
||||
s = s.replace(line1_id, "{{uuid:line1_id}}")
|
||||
s = s.replace(line2_id, "{{uuid:line2_id}}")
|
||||
s = re.sub(r"'[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}'", "'{{uuid}}'", s)
|
||||
s = s.replace("'2026-03-10T00:00:00Z'", "'{{timestamp}}'")
|
||||
s = s.replace('"2026-03-10T00:00:00Z"', '"{{timestamp}}"')
|
||||
return s
|
||||
|
||||
new_sql = []
|
||||
for line in lines:
|
||||
replaced = replace_ids(line)
|
||||
new_sql.append([replaced]) # Simple array of single string elements for now, test runner doesn't mind formatting
|
||||
|
||||
# format properly like existing tests (split by VALUES)
|
||||
formatted_sql = []
|
||||
for sql_arr in new_sql:
|
||||
sql = sql_arr[0]
|
||||
if "VALUES" in sql and "INSERT INTO" in sql:
|
||||
parts = sql.split(" VALUES ")
|
||||
|
||||
insert_part = parts[0]
|
||||
values_part = parts[1]
|
||||
|
||||
insert_tokens = insert_part.split(" (")
|
||||
table = insert_tokens[0]
|
||||
cols = insert_tokens[1][:-1].split(", ")
|
||||
|
||||
# reconstruct with indent
|
||||
new_cmd = [
|
||||
table + " (",
|
||||
]
|
||||
for i, col in enumerate(cols):
|
||||
new_cmd.append(" " + col + ("," if i < len(cols) - 1 else ""))
|
||||
new_cmd.append(")")
|
||||
new_cmd.append("VALUES (")
|
||||
|
||||
vals = values_part[1:-1].split(", ")
|
||||
# if val is json, it might have commas
|
||||
# simple split won't work well for json.
|
||||
# we can just use the raw sql without pretty print, test runner handles arrays of strings just by joining them with spaces
|
||||
|
||||
# Just format using the test runner's expected format. Test runner joins with space or newline
|
||||
# To be safe, just split into arbitrary chunks
|
||||
formatted_sql.append([sql])
|
||||
|
||||
|
||||
with open("fixtures/merger.json", "r") as f:
|
||||
data = json.load(f)
|
||||
|
||||
test_case = next(t for t in data[0]["tests"] if t["description"] == "Test organization_id syntactic sugar permutations")
|
||||
test_case["expect"]["sql"] = formatted_sql
|
||||
|
||||
with open("fixtures/merger.json", "w") as f:
|
||||
json.dump(data, f, indent=2)
|
||||
Reference in New Issue
Block a user