Skip to content

Commit 3900bff

Browse files
committed
RDBC-768 NextAndSeedIdentitiesTest::seedIdentityFor
1 parent a6d5321 commit 3900bff

File tree

2 files changed

+90
-1
lines changed

2 files changed

+90
-1
lines changed

ravendb/documents/operations/identities.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,55 @@ def __init__(self, name: str):
6464

6565
def get_command(self, conventions: "DocumentConventions") -> "RavenCommand[int]":
6666
return NextIdentityForCommand(self._identity_name)
67+
68+
69+
class SeedIdentityForCommand(RavenCommand[int], RaftCommand):
70+
def __init__(self, id_: str, value: int = None, forced: bool = False):
71+
super().__init__(int)
72+
if id_ is None:
73+
raise ValueError("Id cannot be None")
74+
75+
self._id = id_
76+
self._value = value
77+
self._forced = forced
78+
79+
def is_read_request(self) -> bool:
80+
return False
81+
82+
def create_request(self, node: ServerNode) -> requests.Request:
83+
self.ensure_is_not_null_or_string(self._id, "id")
84+
85+
url = f"{node.url}/databases/{node.database}/identity/seed?name={self._id}&value={self._value}"
86+
87+
if self._forced:
88+
url += "&force=true"
89+
90+
return requests.Request("POST", url)
91+
92+
def set_response(self, response: Optional[str], from_cache: bool) -> None:
93+
if response is None:
94+
self._throw_invalid_response()
95+
96+
json_node = json.loads(response)
97+
98+
if "NewSeedValue" not in json_node:
99+
self._throw_invalid_response()
100+
101+
self.result = json_node["NewSeedValue"]
102+
103+
def get_raft_unique_request_id(self) -> str:
104+
return RaftIdGenerator.new_id()
105+
106+
107+
class SeedIdentityForOperation(MaintenanceOperation[int]):
108+
def __init__(self, name: str, value: int, force_update: bool = False):
109+
super().__init__()
110+
if not name or name.isspace():
111+
raise ValueError("The field name cannot be None or whitespace")
112+
113+
self._identity_name = name
114+
self._identity_value = value
115+
self._force_update = force_update
116+
117+
def get_command(self, conventions: "DocumentConventions") -> "RavenCommand[_T]":
118+
return SeedIdentityForCommand(self._identity_name, self._identity_value, self._force_update)

ravendb/tests/jvm_migrated_tests/client_tests/test_next_and_seed_identities.py

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from ravendb.documents.operations.identities import NextIdentityForOperation
1+
from ravendb.documents.operations.identities import NextIdentityForOperation, SeedIdentityForOperation
2+
from ravendb.infrastructure.entities import User
23
from ravendb.tests.test_base import TestBase
34

45

@@ -11,3 +12,39 @@ def test_next_identity_for_operation_should_create_a_new_identify_if_there_is_no
1112
result = self.store.maintenance.send(NextIdentityForOperation("person|"))
1213

1314
self.assertEqual(1, result)
15+
16+
def test_seed_identity_for(self):
17+
with self.store.open_session() as session:
18+
user = User(last_name="Adi")
19+
session.store(user, "users|")
20+
session.save_changes()
21+
22+
result1 = self.store.maintenance.send(SeedIdentityForOperation("users", 1990))
23+
self.assertEqual(1990, result1)
24+
25+
with self.store.open_session() as session:
26+
user = User(last_name="Avivi")
27+
session.store(user, "users|")
28+
session.save_changes()
29+
30+
with self.store.open_session() as session:
31+
entity_with_id_1 = session.load("users/1", User)
32+
entity_with_id_2 = session.load("users/2", User)
33+
entity_with_id_1990 = session.load("users/1990", User)
34+
entity_with_id_1991 = session.load("users/1991", User)
35+
entity_with_id_1992 = session.load("users/1992", User)
36+
37+
self.assertIsNotNone(entity_with_id_1)
38+
self.assertIsNotNone(entity_with_id_1991)
39+
self.assertIsNone(entity_with_id_2)
40+
self.assertIsNone(entity_with_id_1990)
41+
self.assertIsNone(entity_with_id_1992)
42+
43+
self.assertEqual("Adi", entity_with_id_1.last_name)
44+
self.assertEqual("Avivi", entity_with_id_1991.last_name)
45+
46+
result2 = self.store.maintenance.send(SeedIdentityForOperation("users", 1975))
47+
self.assertEqual(1991, result2)
48+
49+
result3 = self.store.maintenance.send(SeedIdentityForOperation("users", 1975, True))
50+
self.assertEqual(1975, result3)

0 commit comments

Comments
 (0)