Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
b62a79b
Expand merging to Localities, Paleo Ctxt, Collecting Event
CarolineDenis Mar 4, 2024
64c0d6e
Lint code with ESLint and Prettier
CarolineDenis Mar 4, 2024
938370d
Use existing merging tables object
CarolineDenis Mar 5, 2024
eca295d
Lint code with ESLint and Prettier
CarolineDenis Mar 5, 2024
e039dcb
Hanfle zero to one not having a model
CarolineDenis Mar 6, 2024
eee4cb4
Improve getCount function
CarolineDenis Mar 6, 2024
16cc864
Lint code with ESLint and Prettier
CarolineDenis Mar 6, 2024
1437127
Return boolean for unmergeable records
CarolineDenis Mar 19, 2024
c8dcd9c
Lint code with ESLint and Prettier
CarolineDenis Mar 19, 2024
880a553
Fix permission check
CarolineDenis Mar 19, 2024
2630420
Remove undefined checks
CarolineDenis Mar 20, 2024
d406173
test_replace_localities
acwhite211 Mar 20, 2024
2094ce8
test_replace_paleo_contexts and test_replace_collection_events
acwhite211 Mar 20, 2024
20d5fb4
Merge remote-tracking branch 'origin/production' into issue-4046
CarolineDenis Mar 22, 2024
4d5e6a3
Merge remote-tracking branch 'origin/production' into issue-4046
CarolineDenis Apr 16, 2024
91d5928
fix unit tests for the new record merging tables
acwhite211 May 6, 2024
57f9e79
Prevent merging for embedded CE and PC
CarolineDenis May 8, 2024
f9254aa
Add check
CarolineDenis May 8, 2024
bceee72
Lint code with ESLint and Prettier
CarolineDenis May 8, 2024
0d61423
Move logic to separate function
CarolineDenis May 17, 2024
6400375
Lint code with ESLint and Prettier
CarolineDenis May 17, 2024
82a3542
test collector duplicates in Collecting Event merges
acwhite211 May 21, 2024
a158853
Use delete_obj to automatically handle dependent deletion
realVinayak May 21, 2024
2128469
Move API and record merging tests to separate files
realVinayak May 21, 2024
a686a89
Fix frontend tests failing on a backend-only PR. ?????
realVinayak May 21, 2024
99c7f2b
Simplify asset-server deletion + explicit clean handling
realVinayak May 21, 2024
f788d51
Merge remote-tracking branch 'origin/issue-4046' into issue-4046-bbt
realVinayak May 21, 2024
980fa3a
unshare collectingevent attribute
realVinayak May 21, 2024
8c1bcbb
Merge pull request #4940 from specify/issue-4046-bbt
realVinayak May 22, 2024
8cc050d
Merge branch 'production' into issue-4046
acwhite211 May 28, 2024
6d41540
Update model parent field to correct id
CarolineDenis May 29, 2024
01134c8
Test assertion
CarolineDenis May 29, 2024
b27d7aa
fix unit test typo
acwhite211 May 29, 2024
b5d27ff
add to-many check
acwhite211 May 29, 2024
deacb57
Run business rule checks for all dependents
realVinayak May 30, 2024
d13501b
Simplify
realVinayak May 30, 2024
deccba5
Remove code and reassign otherside in uniqueDependentCombined
CarolineDenis May 30, 2024
3dfb7cb
Merge branch 'issue-4046-busrule' into issue-4046
CarolineDenis May 30, 2024
a756c33
Remove import
CarolineDenis May 30, 2024
9d7ebbf
Merge branch 'production' into issue-4046
grantfitzsimmons May 30, 2024
015a04e
Conditionally restrict fields
realVinayak May 30, 2024
3c4c71d
Fixup zero-to-one errornously assuming resource is created
realVinayak May 31, 2024
b27db7f
TS fix + comments
realVinayak May 31, 2024
f5410a5
reset iscurrent anyways
realVinayak Jun 3, 2024
790af30
Merge pull request #4970 from specify/issue-4969
realVinayak Jun 3, 2024
72aa867
fix attachments still being deleted
realVinayak Jun 3, 2024
e6b9aba
Merge branch 'issue-4046' of https://github.com/specify/specify7 into…
realVinayak Jun 3, 2024
4307cd5
backend attachment handling improvement
realVinayak Jun 4, 2024
6f1c22c
update tests
realVinayak Jun 4, 2024
4f2370f
misc bug fixes
realVinayak Jun 4, 2024
1e93455
Lint code with ESLint and Prettier
realVinayak Jun 4, 2024
476f2fa
Fix existing resources being deleted during merge
realVinayak Jun 5, 2024
fc98a79
Lint code with ESLint and Prettier
realVinayak Jun 5, 2024
2f16454
Minor rearrangment to always run field checks
realVinayak Jun 5, 2024
4f51f77
Merge branch 'issue-4046' of https://github.com/specify/specify7 into…
realVinayak Jun 5, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions specifyweb/businessrules/rules/attachment_rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from specifyweb.businessrules.orm_signal_handler import orm_signal_handler
from specifyweb.specify.scoping import Scoping
from specifyweb.specify import models
from django.db import transaction

from specifyweb.businessrules.exceptions import AbortSave

Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/rules/determination_rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,4 @@ def determination_pre_save(det):
def only_one_determination_iscurrent(determination):
if determination.iscurrent:
Determination.objects.filter(
collectionobject=determination.collectionobject_id).update(iscurrent=False)
collectionobject=determination.collectionobject_id).update(iscurrent=False)
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/accession.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.db.models import ProtectedError

from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException


Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/accessionagent.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

from unittest import skip
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException


Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/address.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests

class AddressTests(ApiTests):
def test_at_most_one_primary_address_per_agent(self):
Expand Down
4 changes: 1 addition & 3 deletions specifyweb/businessrules/tests/agent.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@

import unittest

from django.db import transaction

from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class AgentTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/appraisal.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from django.db.models import ProtectedError

from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class AppraisalTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/author.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class AuthorTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/borrowagent.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

from unittest import skip
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class BorrowAgentTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/collectingevents.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.db.models import ProtectedError

from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests

class CollectingEventTests(ApiTests):
def test_collectionobjects_block_delete(self):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/collection.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.db.models import ProtectedError

from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class CollectionTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/collectionobject.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class CollectionObjectTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/collector.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

from unittest import skip
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class CollectorTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/determination.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests

class DeterminationTests(ApiTests):
def test_only_one_determination_iscurrent(self):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/determiner.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

from unittest import skipUnless
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class DeterminerTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/discipline.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class DisciplineTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/division.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class DivisionTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/geography.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from django.db.models import ProtectedError

from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests

class GeographyTests(ApiTests):
def test_delete_blocked_by_locality(self):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/geographytreedefitem.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.db.models import ProtectedError

from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import TreeBusinessRuleException

class GeographyTreeDefItem(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/geologictimeperiod.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from django.db.models import ProtectedError

from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests

class Geologictimeperiod(ApiTests):
def setUp(self):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.db.models import ProtectedError
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import TreeBusinessRuleException

class GeologictimeperiodtreedefitemTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/gift.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.db import IntegrityError
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class GiftTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/groupperson.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from specifyweb.specify.agent_types import agent_types
from ..exceptions import BusinessRuleException

Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/institution.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class InstitutionTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/journal.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.db.models import ProtectedError
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests

class JournalBusinessRuleTests(ApiTests):
def test_referenceworks_block_delete(self):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/lithostrat.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from django.db.models import ProtectedError

from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests

class LithostratTests(ApiTests):
def setUp(self):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/lithostrattreedefitem.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.db.models import ProtectedError
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import TreeBusinessRuleException
from specifyweb.specify import models

Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/loan.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class LoanTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/locality.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.db.models import ProtectedError
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests

class LocalityBusinessRuleTests(ApiTests):
def test_collectingevents_block_delete(self):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/permit.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.db.models import ProtectedError
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException


Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/picklist.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class PicklistTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/preparation.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException


Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/preptype.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.db.models import ProtectedError
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class PrepTypeTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/repositoryagreement.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

class RepositoryAgreementTests(ApiTests):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/shipment.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

from unittest import skip
from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import BusinessRuleException

@skip("these business rules were removed in https://github.com/specify/specify7/issues/474")
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from django.db.models import ProtectedError

from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests

class StorageTests(ApiTests):
def setUp(self):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/storagetreedefitem.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.db.models import ProtectedError
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import TreeBusinessRuleException
from specifyweb.specify import models

Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/taxon.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from django.db.models import ProtectedError

from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests

class TaxonTests(ApiTests):
def setUp(self):
Expand Down
2 changes: 1 addition & 1 deletion specifyweb/businessrules/tests/taxontreedefitem.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.db.models import ProtectedError
from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from ..exceptions import TreeBusinessRuleException
from specifyweb.specify import models

Expand Down
3 changes: 1 addition & 2 deletions specifyweb/businessrules/tests/uniqueness_rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
from django.test import Client

from specifyweb.specify import models
from specifyweb.specify.api_tests import ApiTests
from specifyweb.businessrules.models import UniquenessRule
from specifyweb.specify.tests.test_api import ApiTests
from specifyweb.businessrules.exceptions import BusinessRuleException


Expand Down
2 changes: 1 addition & 1 deletion specifyweb/context/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from jsonschema import validate # type: ignore
from jsonschema.exceptions import ValidationError # type: ignore

from specifyweb.specify.api_tests import ApiTests
from specifyweb.specify.tests.test_api import ApiTests
from . import viewsets


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import type {
TableFields,
} from './helperTypes';
import type { SpecifyResource } from './legacyTypes';
import { ResourceBase } from './resourceApi';
import {
getFieldBlockerKey,
propagateBlockerEvents,
Expand Down Expand Up @@ -476,3 +477,30 @@ export type BusinessRuleResult<SCHEMA extends AnySchema = AnySchema> = {
}
| { readonly isValid: false; readonly reason: string }
);

export const runAllFieldChecks = async (
resource: SpecifyResource<AnySchema>
): Promise<void> => {
const relationships = resource.specifyTable.relationships;
await Promise.all(
relationships.map(({ name }) =>
resource.businessRuleManager?.checkField(name)
)
);
const mapResource = (
result?: SpecifyResource<AnySchema> | Collection<AnySchema> | null
): RA<SpecifyResource<AnySchema>> =>
(result === undefined || result === null
? []
: result instanceof ResourceBase
? [result]
: (result as Collection<AnySchema>).models) as unknown as RA<
SpecifyResource<AnySchema>
>;
// running only on dependent resources. the order shouldn't matter.....
await Promise.all(
Object.values(resource.dependentResources)
.flatMap(mapResource)
.map((next) => runAllFieldChecks(next))
);
};
Loading