Skip to content

Commit

Permalink
Merge pull request #2414 from shadrak98/add_unique_constraints
Browse files Browse the repository at this point in the history
fix(usage-record): Add Unique constraints
  • Loading branch information
shadrak98 authored Jan 11, 2025
2 parents 0c90642 + 49276e0 commit 030ad9b
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 2 deletions.
1 change: 1 addition & 0 deletions press/patches.txt
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ press.press.doctype.virtual_machine_volume.patches.rename_aws_fields
press.patches.v0_7_0.convert_marketplace_description_to_html
press.press.doctype.team.patches.remove_invalid_email_addresses
press.saas.doctype.product_trial.patches.rename_saas_product_doctypes_to_product_trial
press.press.doctype.usage_record.patches.add_unique_constraint

[post_model_sync]
press.patches.v0_7_0.rename_plan_to_site_plan
Expand Down
39 changes: 38 additions & 1 deletion press/press/doctype/subscription/test_subscription.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2020, Frappe and Contributors
# See license.txt

Expand Down Expand Up @@ -93,6 +92,44 @@ def test_subscription_daily(self):
invoice = frappe.get_doc("Invoice", {"team": self.team.name, "status": "Draft"})
self.assertEqual(invoice.total, desired_value)

def test_subscription_for_duplicate_usage_record(self):
todo = frappe.get_doc(doctype="ToDo", description="Test todo").insert()
plan = frappe.get_doc(
doctype="Site Plan",
name="Plan-10",
document_type="ToDo",
interval="Daily",
price_usd=30,
price_inr=30,
).insert()

subscription = frappe.get_doc(
doctype="Subscription",
team=self.team.name,
document_type="ToDo",
document_name=todo.name,
plan_type="Site Plan",
plan=plan.name,
).insert()

# create a usage record
subscription.create_usage_record()

# since create_usage_record silently skips if a record already exists
# check by manually creating a duplicate record
duplicate_usage_record = frappe.new_doc(
doctype="Usage Record",
team=self.team.name,
document_type="ToDo",
document_name=todo.name,
plan_type="Site Plan",
plan=plan.name,
subscription=subscription.name,
interval="Daily",
)
with self.assertRaises(frappe.UniqueValidationError):
duplicate_usage_record.insert()

def test_subscription_for_non_chargeable_document(self):
todo = frappe.get_doc(doctype="ToDo", description="Test todo").insert()
plan = frappe.get_doc(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import frappe


def execute():
frappe.reload_doc("press", "doctype", "usage_record")
frappe.get_doc("DocType", "Usage Record").run_module_method("on_doctype_update")
2 changes: 1 addition & 1 deletion press/press/doctype/usage_record/usage_record.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,4 +124,4 @@ def link_unlinked_usage_records():


def on_doctype_update():
frappe.db.add_index("Usage Record", ["subscription", "date"])
frappe.db.add_unique("Usage Record", ["subscription", "date"], constraint_name="unique_usage_record")

0 comments on commit 030ad9b

Please sign in to comment.