Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MODTLR-105: Release 1.0.1 (Ramsons R2 2024 Bug fix) #86

Merged
merged 211 commits into from
Nov 30, 2024
Merged
Changes from 1 commit
Commits
Show all changes
211 commits
Select commit Hold shift + click to select a range
4bd74c8
MODTLR-20: Create DCB LENDER transaction when secondary request is li…
OleksandrVidinieiev Mar 25, 2024
25befba
Merge remote-tracking branch 'origin/master' into ecs-tlr-feature
OleksandrVidinieiev Apr 2, 2024
2efbb6d
MODTLR-17: Create pickup service point in lending tenant (#28)
OleksandrVidinieiev Apr 8, 2024
024f188
MODTLR-27 Remove unneeded fields from the requester copy, update grou…
MagzhanArtykov Apr 12, 2024
b1bd9b4
MODTLR-30 Fix creation of DCB transactions (#31)
OleksandrVidinieiev Apr 15, 2024
2be1bdb
MODTLR-31 Add `ecsRequestPhase` to primary and secondary requests (#32)
OleksandrVidinieiev Apr 22, 2024
da287f6
MODTLR-33 Add missing dependencies (#33)
alexanderkurash May 10, 2024
2d321ba
MODTLR-25 Create allowed-service-points endpoint (#35)
alexanderkurash May 17, 2024
33644bc
MODTLR-25 Add permission set
alexanderkurash May 23, 2024
f1a6459
Merge pull request #37 from folio-org/MODTLR-25-2
roman-barannyk May 23, 2024
0835e68
MODTLR-37 Upgrade to Spring Boot 3.3.0
OleksandrVidinieiev Jun 4, 2024
b92bc85
MODTLR-47 Create borrowing transaction (#40)
OleksandrVidinieiev Jun 7, 2024
ca20bc5
MODTLR-26 Allowed service points - data tenant interaction (#42)
alexanderkurash Jun 11, 2024
f9e2b95
MODTLR-49 Add allow-service-points permission (#43)
alexanderkurash Jun 18, 2024
e996273
MODTLR-48 consume and handle patron group domain events
roman-barannyk Jun 20, 2024
ac94296
Merge branch 'master' into MODTLR-48
roman-barannyk Jun 20, 2024
8f325c9
Merge branch 'master' of github.com:folio-org/mod-tlr into ecs-tlr-fe…
roman-barannyk Jun 20, 2024
1f0c53d
Merge remote-tracking branch 'origin/ecs-tlr-feature' into ecs-tlr-fe…
roman-barannyk Jun 20, 2024
c2a5825
Merge branch 'ecs-tlr-feature' of github.com:folio-org/mod-tlr into M…
roman-barannyk Jun 20, 2024
57bd988
MODTLR-48 clients refactoring
roman-barannyk Jun 20, 2024
bb9ff3a
MODTLR-48 add logging
roman-barannyk Jun 20, 2024
8347bcb
MODTLR-48 update url for userTenantsClient
roman-barannyk Jun 21, 2024
687947f
MODTLR-48 add modules permissions
roman-barannyk Jun 21, 2024
fd2d4fb
MODTLR-48 fix deploy issue
roman-barannyk Jun 21, 2024
b21f41b
MODTLR-48 add logging
roman-barannyk Jun 21, 2024
2149b0e
MODTLR-34: Update DCB transaction upon request update event (#44)
OleksandrVidinieiev Jun 21, 2024
de46237
MODTLR-48 change name for feign client
roman-barannyk Jun 21, 2024
2c5fd21
MODTLR-48 update logging configuration
roman-barannyk Jun 24, 2024
58e2004
MODTLR-48 update feign client
roman-barannyk Jun 24, 2024
1c48406
MODTLR-48 update feign client
roman-barannyk Jun 24, 2024
dbc0656
MODTLR-48 update logging configuration
roman-barannyk Jun 24, 2024
0ad2ae3
MODTLR-48 update logging configuration
roman-barannyk Jun 24, 2024
dee86cb
Merge remote-tracking branch 'origin/MODTLR-48' into MODTLR-48
roman-barannyk Jun 24, 2024
86a5f50
MODTLR-48 update logging configuration
roman-barannyk Jun 24, 2024
d015245
MODTLR-48 update client
roman-barannyk Jun 24, 2024
38671bb
MODTLR-48 add logging
roman-barannyk Jun 24, 2024
232f198
MODTLR-48 add logging and variables
roman-barannyk Jun 24, 2024
114f8a6
MODTLR-48 userTenants service refactoring
roman-barannyk Jun 24, 2024
db632c1
MODTLR-48 remove mediaType from client
roman-barannyk Jun 25, 2024
1a40d4b
MODTLR-48 update UserTenantsClient
roman-barannyk Jun 25, 2024
fe3fb13
MODTLR-48 update UserTenantsClient
roman-barannyk Jun 25, 2024
db12125
MODTLR-48 update event handler
roman-barannyk Jun 25, 2024
1c4c1ce
MODTLR-48 update feign client
roman-barannyk Jun 25, 2024
63a338e
MODTLR-48 update event handler
roman-barannyk Jun 26, 2024
05b56f5
MODTLR-48 update logging configuration
roman-barannyk Jun 26, 2024
db916e5
MODTLR-48 fix tests
roman-barannyk Jun 26, 2024
4e9b05f
Merge branch 'ecs-tlr-feature' of github.com:folio-org/mod-tlr into M…
roman-barannyk Jun 26, 2024
a5188aa
MODTLR-48 conflicts resolving, refactoring
roman-barannyk Jun 27, 2024
f560ebc
MODTLR-48 remove commented code
roman-barannyk Jun 27, 2024
1177ae1
MODTLR-48 add test
roman-barannyk Jun 27, 2024
c064471
MODTLR-48 improve coverage
roman-barannyk Jun 27, 2024
8c8d748
MODTLR-48 improve tests coverage
roman-barannyk Jun 27, 2024
c5f55a8
MODTLR-48 fix code smell
roman-barannyk Jun 27, 2024
920fbb1
MODTLR-47 Create borrowing transaction in mod-dcb
MagzhanArtykov Jun 27, 2024
4fb06e0
MODTLR-47 Create borrowing transaction in mod-dcb
MagzhanArtykov Jun 27, 2024
2fe8843
MODTLR-47 Create borrowing transaction in mod-dcb
MagzhanArtykov Jul 2, 2024
8ed86e3
Update src/main/java/org/folio/service/impl/DcbServiceImpl.java
MagzhanArtykov Jul 2, 2024
cab8b72
Update src/main/java/org/folio/service/impl/DcbServiceImpl.java
MagzhanArtykov Jul 2, 2024
942622b
Merge pull request #46 from folio-org/MODTLR-47
MagzhanArtykov Jul 2, 2024
d3c1e31
Merge remote-tracking branch 'refs/remotes/origin/ecs-tlr-feature' in…
OleksandrVidinieiev Jul 3, 2024
1d807b4
MODTLR-44 call publications when ECS TLR setting updated
roman-barannyk Jul 3, 2024
add80ab
MODTLR-48 remove redundant dependency
roman-barannyk Jul 3, 2024
a12fd13
Merge remote-tracking branch 'origin/MODTLR-48' into MODTLR-48
roman-barannyk Jul 3, 2024
dae6313
MODTLR-48 Add tenant ID to KafkaEvent
alexanderkurash Jul 5, 2024
b14c24a
MODTLR-48 Additional properties in cloned schemas
alexanderkurash Jul 5, 2024
61f7677
MODTLR-34 Fix typo
OleksandrVidinieiev Jul 5, 2024
910f502
MODTLR-48 Request events - get tenant from header
alexanderkurash Jul 5, 2024
ce814e1
Merge branch 'MODTLR-48' of https://github.com/folio-org/mod-tlr into…
alexanderkurash Jul 5, 2024
17f5114
MODTLR-48 Remove failing assertions
alexanderkurash Jul 5, 2024
962e25a
Merge branch 'MODTLR-48' of github.com:folio-org/mod-tlr into MODTLR-44
roman-barannyk Jul 8, 2024
9dac12f
MODTLR-44 add tests
roman-barannyk Jul 8, 2024
887ae93
MODTLR-44 fix broken test
roman-barannyk Jul 8, 2024
30da172
MODTLR-48 Add API tests
alexanderkurash Jul 8, 2024
aacaad6
MODTLR-48 Match only path for user-tenants mock
alexanderkurash Jul 8, 2024
752a61c
Merge branch 'MODTLR-48' of github.com:folio-org/mod-tlr into MODTLR-44
roman-barannyk Jul 9, 2024
14e3cb7
MODTLR-48 Fail when cannot get tenant ID
alexanderkurash Jul 9, 2024
31f59cf
MODTLR-48 Make mock methods static
alexanderkurash Jul 9, 2024
7f5a8a7
MODTLR-48 Fix tests
alexanderkurash Jul 9, 2024
6f29b72
MODTLR-48 Fix unit tests
alexanderkurash Jul 9, 2024
8fd469c
MODTLR-48 Remove duplicated code
alexanderkurash Jul 9, 2024
53f6e6a
Merge branch 'MODTLR-48' of github.com:folio-org/mod-tlr into MODTLR-44
roman-barannyk Jul 9, 2024
82e1a8c
[MODTLR-48] Consume and handle patron group domain events (#45)
roman-barannyk Jul 9, 2024
31b1c85
Merge branch 'ecs-tlr-feature' of github.com:folio-org/mod-tlr into M…
roman-barannyk Jul 9, 2024
6aecce1
MODTLR-44 add test
roman-barannyk Jul 10, 2024
fbb7c55
MODTLR-44 remove code smell
roman-barannyk Jul 10, 2024
5fe3e99
MODTLR-44 fix code smell
roman-barannyk Jul 10, 2024
17dc247
MODTLR-44 fix publishing to coordinator
roman-barannyk Jul 10, 2024
7ceafd0
MODTLR-44 add permission
roman-barannyk Jul 10, 2024
63451ba
MODTLR-44 refactoring
roman-barannyk Jul 10, 2024
aaa74bd
MODTLR-44 refactoring
roman-barannyk Jul 11, 2024
f09b020
MODTLR-44 add permission
roman-barannyk Jul 11, 2024
cf3cf79
MODTLR-44 update logging
roman-barannyk Jul 11, 2024
5879e21
MODTLR-44 update publish request mapping
roman-barannyk Jul 11, 2024
c6e8855
MODTLR-44 refactoring
roman-barannyk Jul 11, 2024
a0090f7
MODTLR-44 refactoring
roman-barannyk Jul 11, 2024
965db15
MODTLR-44 update publish request mapping
roman-barannyk Jul 11, 2024
41292b9
MODTLR-44 remove system user scope execution
roman-barannyk Jul 12, 2024
4fc6c34
MODTLR-44 fix tests
roman-barannyk Jul 12, 2024
c45c1af
MODTLR-44 fix code smell
roman-barannyk Jul 12, 2024
08c5ea7
MODTLR-44 incorporating review comments
roman-barannyk Jul 19, 2024
a63c36a
MODTLR-44 revert instantiation changes
roman-barannyk Jul 19, 2024
06a8c19
MODTLR-44 add negative test
roman-barannyk Jul 19, 2024
6c963e3
MODTLR-44 update schemas
roman-barannyk Jul 19, 2024
623c763
MODTLR-44 refactoring
roman-barannyk Jul 22, 2024
6e66a95
MODTLR-44 remove unused imports
roman-barannyk Jul 22, 2024
34045bc
MODTLR-44 remove empty line
roman-barannyk Jul 22, 2024
36a606f
MODTLR-44 update logging
roman-barannyk Jul 22, 2024
f1a208f
MODTLR-44 update logging
roman-barannyk Jul 22, 2024
1a30a44
[MODTLR-50] Use patronGroupId parameter instead of requesterId (#48)
MagzhanArtykov Jul 22, 2024
d695457
Merge pull request #47 from folio-org/MODTLR-44
roman-barannyk Jul 22, 2024
d4b433f
MODTLR-41: Propagate changes from primary to secondary request (#49)
OleksandrVidinieiev Jul 22, 2024
051a4fa
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Jul 26, 2024
6849368
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Jul 26, 2024
5367e64
MODTLR-52 switch additionalProperties to true to defined schemas (#51)
Maksat-Galymzhan Jul 26, 2024
e097d8f
MODTLR-51: Create DCB transactions immediately when ECS TLR is create…
OleksandrVidinieiev Jul 29, 2024
d2fd6b8
MODTLR-42 reorder secondary requests
roman-barannyk Jul 31, 2024
0c8e382
MODTLR-42 reorder secondary requests
roman-barannyk Jul 31, 2024
dfc293a
MODTLR-54: Use `requesterId` instead of `patronGroupId` in Alllowed S…
OleksandrVidinieiev Aug 1, 2024
01a3e74
MODTLR-42 reorder secondary requests
roman-barannyk Jul 31, 2024
3d15021
MODTLR-42 reorder secondary requests
roman-barannyk Jul 31, 2024
dc192c0
Merge branch 'MODTLR-42' of github.com:folio-org/mod-tlr into MODTLR-42
roman-barannyk Aug 5, 2024
38ba1ab
Merge branch 'ecs-tlr-feature' of https://github.com/folio-org/mod-tl…
MagzhanArtykov Aug 5, 2024
320db0f
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 5, 2024
98563e7
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 5, 2024
d49ea5e
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 5, 2024
dfe3f0f
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 5, 2024
4ec3d34
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 5, 2024
906a01f
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 5, 2024
4a91009
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 5, 2024
927ad29
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 5, 2024
ee857dc
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 5, 2024
6ae792e
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 5, 2024
087a17d
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 5, 2024
a49e195
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 5, 2024
f2f227b
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 5, 2024
e2292f9
MODTLR-42 update logic
roman-barannyk Aug 6, 2024
c190ec6
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 6, 2024
1bdb61b
MODTLR-42 remove code smell
roman-barannyk Aug 6, 2024
0981323
MODTLR-53 Autogenerate UUID for ECS TLR when client doesn't provide i…
Maksat-Galymzhan Aug 6, 2024
9376dcb
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 6, 2024
0b28bef
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 6, 2024
8a333fb
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 6, 2024
f7071ce
Merge branch 'ecs-tlr-feature' of https://github.com/folio-org/mod-tl…
MagzhanArtykov Aug 6, 2024
01d6a2b
MODTLR-42 update test, refactoring
roman-barannyk Aug 6, 2024
0c6fbd2
MODTLR-42 refactoring
roman-barannyk Aug 6, 2024
f095dfc
MODTLR-42 fix code smell
roman-barannyk Aug 6, 2024
dfa3b26
MODTLR-42 add empty line
roman-barannyk Aug 7, 2024
7be7a0a
MODTLR-42 code refactoring
roman-barannyk Aug 7, 2024
00a3e13
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 7, 2024
79168f5
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 8, 2024
747546e
MODTLR-40 Close ECS TLR when both Primary and Secondary requests are …
MagzhanArtykov Aug 9, 2024
3911d22
MODTLR-42 update logic
roman-barannyk Aug 12, 2024
b4ab8d0
MODTLR-42 update logging
roman-barannyk Aug 12, 2024
dfdfee9
MODTLR-42 use RequestCirculationClient
roman-barannyk Aug 13, 2024
0bdc528
MODTLR-42 remove redundant clients method
roman-barannyk Aug 14, 2024
f579946
Merge pull request #53 from folio-org/MODTLR-40
MagzhanArtykov Aug 16, 2024
2ba4032
MODTLR-42 move reordering to another event listener
roman-barannyk Aug 19, 2024
5573502
MODTLR-42 move tests
roman-barannyk Aug 19, 2024
8bc9e9b
MODTLR-42 fix code smells
roman-barannyk Aug 19, 2024
07de23e
MODTLR-42 update logging
roman-barannyk Aug 19, 2024
a97f959
MODTLR-42 code refactoring
roman-barannyk Aug 19, 2024
affb50c
MODTLR-42 rename topic
roman-barannyk Aug 19, 2024
5983c50
Merge pull request #56 from folio-org/MODTLR-42
roman-barannyk Aug 19, 2024
01f9cb7
MODTLR-43 improve logging
roman-barannyk Aug 22, 2024
8c5ce80
MODTLR-43 improve logging
roman-barannyk Aug 22, 2024
35990aa
MODTLR-43 add no ecs tlr condition scenario
roman-barannyk Aug 22, 2024
31e5314
MODTLR-43 use reordering api
roman-barannyk Aug 27, 2024
e98d1c7
MODTLR-43 add test
roman-barannyk Aug 28, 2024
88e3135
MODTLR-43 add test
roman-barannyk Aug 28, 2024
14a46d4
MODTLR-43 test refactoring
roman-barannyk Aug 28, 2024
8d53499
MODTLR-43 fix code smells
roman-barannyk Aug 28, 2024
b4af395
MODTLR-56: Support for operation `replace` in Allowed Service Points …
OleksandrVidinieiev Aug 29, 2024
68c27d5
MODTLR-57: Add system user variables, bump folio-spring-system-user v…
Maksat-Galymzhan Aug 29, 2024
17648df
MODTLR-43 fix NPE
roman-barannyk Aug 29, 2024
9a564fd
Merge pull request #58 from folio-org/MODTLR-43
roman-barannyk Aug 29, 2024
a9430d1
MODTLR-67: Get token from headers as a fallback (#60)
OleksandrVidinieiev Sep 10, 2024
f0e40f8
[MODTLR-59] - Allow service point api take item-level param (#61)
Maksat-Galymzhan Sep 16, 2024
9de1aac
[MODTLR-73] Fix remaining ECS TLR scenarios and create tests (#64)
roman-barannyk Sep 27, 2024
cdb4ee9
MODTLR-73 Add missing permission fr circulation item (#65)
MagzhanArtykov Oct 28, 2024
8cc2aa2
MODTLR-73 add missed permission
roman-barannyk Oct 29, 2024
629d87f
MODTLR-73 add missed permission
roman-barannyk Oct 29, 2024
892d347
Merge pull request #66 from folio-org/MODTLR-73-2
roman-barannyk Oct 29, 2024
db185cc
MODTLR-73 update log level
roman-barannyk Oct 29, 2024
daa7145
MODTLR-73 update log level (#67)
roman-barannyk Oct 29, 2024
553550c
MODTLR-73 add missed permission
roman-barannyk Oct 30, 2024
a9c6ca7
Merge branch 'ecs-tlr-feature' of github.com:folio-org/mod-tlr into M…
roman-barannyk Oct 30, 2024
ae4a978
Merge pull request #68 from folio-org/MODTLR-73-2
roman-barannyk Oct 30, 2024
2dee54e
Merge pull request #70 from folio-org/tmp-release-1.0.0
roman-barannyk Oct 30, 2024
74a64a9
Merge branch 'ecs-tlr-feature' into MODTLR-69
alexanderkurash Nov 1, 2024
74a4438
MODTLR-69 Update interface versions
alexanderkurash Nov 1, 2024
7ffa83a
MODTLR-69 Upgrade to SpringBoot v3.3
alexanderkurash Nov 1, 2024
8b58885
MODTLR-69 Remove unused import
alexanderkurash Nov 1, 2024
1119168
Merge pull request #71 from folio-org/MODTLR-69
alexanderkurash Nov 1, 2024
c01e3c5
MODTLR-69 Handle exceptions in Kafka listener (#72)
alexanderkurash Nov 2, 2024
a1d6fee
MODTLR-58: Pick Slips API (part 1) (#69)
OleksandrVidinieiev Nov 2, 2024
21e44eb
MODTLR-84 Handle null circulation item correctly (#74)
alexanderkurash Nov 9, 2024
396e4a6
MODTLR-68: Allowed service points - only use lending side circulation…
imerabishvili Nov 16, 2024
e68e659
[MODTLR-82] Incorporate support for Locate ECS requests (#76)
roman-barannyk Nov 16, 2024
f4202d5
MODTLR-79: Pick Slips API (part 2) (#78)
OleksandrVidinieiev Nov 21, 2024
ea5bc7f
Fix permissions for mod-patron (#73)
azizbekxm Nov 22, 2024
80b9f17
MODTLR-97 Rename mod-settings permissions (#79)
alexanderkurash Nov 22, 2024
ba1ec7b
MODTLR-64 Consume and handle user UPDATE events (#77)
roman-barannyk Nov 23, 2024
5e1c9c7
MODTLR-99 Revert mod-settings perms (#80)
alexanderkurash Nov 25, 2024
5757f07
MODTLR-100 Add system user to module descriptor (#81)
alexanderkurash Nov 27, 2024
43d5b57
MODTLR-104 Remove okapi token parsing (#82)
alexanderkurash Nov 28, 2024
6c433f3
MODTLR-104 Add mod-settings perms to system user (#84)
alexanderkurash Nov 29, 2024
fd1dfb9
MODTLR-102: Allowed SP - accept patronGroupId parameter (#83)
imerabishvili Nov 29, 2024
d2a12a9
Merge branch 'master' of https://github.com/folio-org/mod-tlr into bu…
OleksandrVidinieiev Nov 30, 2024
14d7495
MODTLR-105 Update NEWS
OleksandrVidinieiev Nov 30, 2024
d0fb45f
[maven-release-plugin] prepare release v1.0.1
OleksandrVidinieiev Nov 30, 2024
b16b5df
[maven-release-plugin] prepare for next development iteration
OleksandrVidinieiev Nov 30, 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
Next Next commit
MODTLR-20: Create DCB LENDER transaction when secondary request is li…
…nked to an item (#20)

* MODTLR-13 Use Kafka from Testcontainers

* MODTLR-13 Enable system user

* MODTLR-20 Create DCB transactions when secondary request is linked to an item

* MODTLR-20 Use constructor injection for DcbService

* MODTLR-20 Additional check in test

* MODTLR-20 Fix formatting

* MODTLR-20 Fix permission for DCB-transactions

* MODTLR-20 Fix URL for DCB-transactions API

* MODTLR-20 Improve logging

* MODTLR-20 Comment out code for BORROWER transactions

* MODTLR-20 Create DCB transactions in different tenants

* MODTLR-20 debug: create system user for tenant "college"

* Revert "MODTLR-20 debug: create system user for tenant "college""

This reverts commit db4bc19.

* MODTLR-20 Tests refactoring

* MODTLR-20 Fix logging

(cherry picked from commit c42306a)
OleksandrVidinieiev committed Mar 28, 2024
commit 4bd74c82cabc0a1c2532f510417399814b8fe425
2 changes: 1 addition & 1 deletion src/main/java/org/folio/client/feign/DcbClient.java
Original file line number Diff line number Diff line change
@@ -14,7 +14,7 @@
@FeignClient(name = "dcb", url = "${folio.okapi-url}", configuration = FeignClientConfiguration.class)
public interface DcbClient {

@PostMapping("/ecs-tlr-transactions/{dcbTransactionId}")
@PostMapping("/ecs-request-transactions/{dcbTransactionId}")
TransactionStatusResponse createDcbTransaction(@PathVariable String dcbTransactionId,
@RequestBody DcbTransaction dcbTransaction);

6 changes: 5 additions & 1 deletion src/main/java/org/folio/domain/entity/EcsTlrEntity.java
Original file line number Diff line number Diff line change
@@ -23,7 +23,6 @@ public class EcsTlrEntity {
private UUID id;
private UUID instanceId;
private UUID requesterId;
private UUID secondaryRequestId;
private String requestType;
private String requestLevel;
private Date requestExpirationDate;
@@ -32,5 +31,10 @@ public class EcsTlrEntity {
private String fulfillmentPreference;
private UUID pickupServicePointId;
private UUID itemId;
private UUID primaryRequestId;
private String primaryRequestTenantId;
private UUID primaryRequestDcbTransactionId;
private UUID secondaryRequestId;
private String secondaryRequestTenantId;
private UUID secondaryRequestDcbTransactionId;
}
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

import lombok.extern.log4j.Log4j2;

@Component
5 changes: 3 additions & 2 deletions src/main/java/org/folio/repository/EcsTlrRepository.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package org.folio.repository;

import java.util.Optional;
import java.util.UUID;

import org.folio.domain.entity.EcsTlrEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
import java.util.UUID;

@Repository
public interface EcsTlrRepository extends JpaRepository<EcsTlrEntity, UUID> {
7 changes: 7 additions & 0 deletions src/main/java/org/folio/service/DcbService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.folio.service;

import org.folio.domain.entity.EcsTlrEntity;

public interface DcbService {
void createTransactions(EcsTlrEntity ecsTlr);
}
2 changes: 1 addition & 1 deletion src/main/java/org/folio/service/EcsTlrService.java
Original file line number Diff line number Diff line change
@@ -10,5 +10,5 @@ public interface EcsTlrService {
EcsTlr create(EcsTlr ecsTlr);
boolean update(UUID requestId, EcsTlr ecsTlr);
boolean delete(UUID requestId);
void updateRequestItem(UUID secondaryRequestId, UUID itemId);
void handleSecondaryRequestUpdate(UUID secondaryRequestId, UUID itemId);
}
2 changes: 2 additions & 0 deletions src/main/java/org/folio/service/impl/CustomTenantService.java
Original file line number Diff line number Diff line change
@@ -26,6 +26,8 @@ public CustomTenantService(JdbcTemplate jdbcTemplate, FolioExecutionContext cont
@Override
protected void afterTenantUpdate(TenantAttributes tenantAttributes) {
log.debug("afterTenantUpdate:: parameters tenantAttributes: {}", () -> tenantAttributes);
log.info("afterTenantUpdate:: start");
systemUserService.setupSystemUser();
log.info("afterTenantUpdate:: finished");
}
}
57 changes: 57 additions & 0 deletions src/main/java/org/folio/service/impl/DcbServiceImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package org.folio.service.impl;

import static org.folio.domain.dto.DcbTransaction.RoleEnum.LENDER;

import java.util.UUID;

import org.folio.client.feign.DcbClient;
import org.folio.domain.dto.DcbTransaction;
import org.folio.domain.entity.EcsTlrEntity;
import org.folio.service.DcbService;
import org.folio.spring.service.SystemUserScopedExecutionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import lombok.extern.log4j.Log4j2;

@Service
@Log4j2
public class DcbServiceImpl implements DcbService {

private final DcbClient dcbClient;
private final SystemUserScopedExecutionService executionService;

public DcbServiceImpl(@Autowired DcbClient dcbClient,
@Autowired SystemUserScopedExecutionService executionService) {

this.dcbClient = dcbClient;
this.executionService = executionService;
}

public void createTransactions(EcsTlrEntity ecsTlr) {
log.info("createTransactions:: creating DCB transactions for ECS TLR {}", ecsTlr.getId());
// final UUID borrowerTransactionId = createTransaction(ecsTlr.getPrimaryRequestId(), BORROWER,
// ecsTlr.getPrimaryRequestTenantId());
final UUID lenderTransactionId = createTransaction(ecsTlr.getSecondaryRequestId(), LENDER,
ecsTlr.getSecondaryRequestTenantId());
// ecsTlr.setPrimaryRequestDcbTransactionId(borrowerTransactionId);
ecsTlr.setSecondaryRequestDcbTransactionId(lenderTransactionId);
log.info("createTransactions:: DCB transactions for ECS TLR {} created", ecsTlr.getId());
}

private UUID createTransaction(UUID requestId, DcbTransaction.RoleEnum role, String tenantId) {
final UUID transactionId = UUID.randomUUID();
log.info("createTransaction:: creating {} transaction {} for request {} in tenant {}", role,
transactionId, requestId, tenantId);
final DcbTransaction transaction = new DcbTransaction()
.requestId(requestId.toString())
.role(role);
var response = executionService.executeSystemUserScoped(tenantId,
() -> dcbClient.createDcbTransaction(transactionId.toString(), transaction));
log.info("createTransaction:: {} transaction {} created", role, transactionId);
log.debug("createTransaction:: {}", () -> response);

return transactionId;
}

}
38 changes: 22 additions & 16 deletions src/main/java/org/folio/service/impl/EcsTlrServiceImpl.java
Original file line number Diff line number Diff line change
@@ -12,6 +12,7 @@
import org.folio.domain.mapper.EcsTlrMapper;
import org.folio.exception.TenantPickingException;
import org.folio.repository.EcsTlrRepository;
import org.folio.service.DcbService;
import org.folio.service.EcsTlrService;
import org.folio.service.RequestService;
import org.folio.service.TenantService;
@@ -29,6 +30,7 @@ public class EcsTlrServiceImpl implements EcsTlrService {
private final EcsTlrMapper requestsMapper;
private final TenantService tenantService;
private final RequestService requestService;
private final DcbService dcbService;

@Override
public Optional<EcsTlr> get(UUID id) {
@@ -120,7 +122,7 @@ private static Request buildPrimaryRequest(Request secondaryRequest) {
}

private static void updateEcsTlr(EcsTlr ecsTlr, RequestWrapper primaryRequest,
RequestWrapper secondaryRequest) {
RequestWrapper secondaryRequest) {

log.info("updateEcsTlr:: updating ECS TLR in memory");
ecsTlr.primaryRequestTenantId(primaryRequest.tenantId())
@@ -134,26 +136,30 @@ private static void updateEcsTlr(EcsTlr ecsTlr, RequestWrapper primaryRequest,
}

@Override
public void updateRequestItem(UUID secondaryRequestId, UUID itemId) {
log.debug("updateRequestItem:: parameters secondaryRequestId: {}, itemId: {}",
public void handleSecondaryRequestUpdate(UUID secondaryRequestId, UUID itemId) {
log.debug("handleSecondaryRequestUpdate:: parameters secondaryRequestId: {}, itemId: {}",
secondaryRequestId, itemId);
log.info("handleSecondaryRequestUpdate:: looking for ECS TLR for secondary request {}",
secondaryRequestId);
ecsTlrRepository.findBySecondaryRequestId(secondaryRequestId).ifPresentOrElse(
ecsTlr -> updateItemIfChanged(ecsTlr, itemId),
() -> log.info("updateRequestItem: ECS TLR with secondary request ID {} not found",
ecsTlr -> handleSecondaryRequestUpdate(ecsTlr, itemId),
() -> log.info("handleSecondaryRequestUpdate: ECS TLR with secondary request {} not found",
secondaryRequestId));
}

private void updateItemIfChanged(EcsTlrEntity ecsTlr, UUID itemId) {
if (!itemId.equals(ecsTlr.getItemId())) {
log.info("updateItemIfChanged:: updating ECS TLR {}, new itemId is {}",
ecsTlr.getId(), itemId);
ecsTlr.setItemId(itemId);
ecsTlrRepository.save(ecsTlr);
log.info("updateItemIfChanged:: ECS TLR {} with secondary request ID {} is updated",
ecsTlr.getId(), ecsTlr.getSecondaryRequestId());
} else {
log.info("updateItemIfChanged:: ECS TLR {} with secondary request ID {} is already updated",
ecsTlr.getId(), ecsTlr.getSecondaryRequestId());
private void handleSecondaryRequestUpdate(EcsTlrEntity ecsTlr, UUID itemId) {
log.debug("handleSecondaryRequestUpdate:: parameters ecsTlr: {}, itemId: {}",
() -> ecsTlr, () -> itemId);
final UUID ecsTlrId = ecsTlr.getId();
final UUID ecsTlrItemId = ecsTlr.getItemId();
if (ecsTlrItemId != null) {
log.info("handleSecondaryRequestUpdate:: ECS TLR {} already has itemId: {}", ecsTlrId, ecsTlrItemId);
return;
}
dcbService.createTransactions(ecsTlr);
log.info("handleSecondaryRequestUpdate:: updating ECS TLR {}, new itemId is {}", ecsTlrId, itemId);
ecsTlr.setItemId(itemId);
ecsTlrRepository.save(ecsTlr);
log.info("handleSecondaryRequestUpdate: ECS TLR {} is updated", ecsTlrId);
}
}
Original file line number Diff line number Diff line change
@@ -21,11 +21,14 @@ public class KafkaEventHandlerImpl implements KafkaEventHandler {

@Override
public void handleRequestEvent(KafkaEvent event) {
log.info("handleRequestEvent:: processing request event: {}", event.getEventId());
log.info("handleRequestEvent:: processing request event: {}", () -> event);
if (event.getEventType() == UPDATED && event.hasNewNode() && event.getNewNode().has(ITEM_ID)) {
ecsTlrService.updateRequestItem(getUUIDFromNode(event.getNewNode(), "id"),
log.info("handleRequestEvent:: handling request event: {}", () -> event);
ecsTlrService.handleSecondaryRequestUpdate(getUUIDFromNode(event.getNewNode(), "id"),
getUUIDFromNode(event.getNewNode(), ITEM_ID));
} else {
log.info("handleRequestEvent:: ignoring event: {}", () -> event);
}
log.info("handleRequestEvent:: request event processed: {}", event.getEventId());
log.info("handleRequestEvent:: request event processed: {}", () -> event);
}
}
9 changes: 8 additions & 1 deletion src/main/java/org/folio/support/KafkaEvent.java
Original file line number Diff line number Diff line change
@@ -3,16 +3,22 @@
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Getter;
import lombok.ToString;
import lombok.extern.log4j.Log4j2;
import java.util.UUID;

@Log4j2
@Getter
@ToString(onlyExplicitlyIncluded = true)
public class KafkaEvent {
private static final ObjectMapper objectMapper = new ObjectMapper();
public static final String STATUS = "status";
public static final String ITEM_ID = "itemId";
@ToString.Include
private String eventId;
@ToString.Include
private String tenant;
@ToString.Include
private EventType eventType;
private JsonNode newNode;
private JsonNode oldNode;
@@ -24,6 +30,7 @@ public KafkaEvent(String eventPayload) {
setEventType(jsonNode.get("type").asText());
setNewNode(jsonNode.get("data"));
setOldNode(jsonNode.get("data"));
this.tenant = jsonNode.get("tenant").asText();
} catch (Exception e) {
log.error("KafkaEvent:: could not parse input payload for processing event", e);
}
@@ -61,6 +68,6 @@ public void setEventId(String eventId) {
}

public enum EventType {
UPDATED, CREATED
UPDATED, CREATED, DELETED, ALL_DELETED
}
}
4 changes: 4 additions & 0 deletions src/main/resources/db/changelog/changes/initial_schema.xml
Original file line number Diff line number Diff line change
@@ -15,8 +15,12 @@
</column>
<column name="instance_id" type="uuid"/>
<column name="requester_id" type="uuid"/>
<column name="primary_request_id" type="uuid"/>
<column name="primary_request_tenant_id" type="varchar(255)"/>
<column name="primary_request_dcb_transaction_id" type="uuid"/>
<column name="secondary_request_id" type="uuid"/>
<column name="secondary_request_tenant_id" type="varchar(255)"/>
<column name="secondary_request_dcb_transaction_id" type="uuid"/>
<column name="request_type" type="varchar(255)"/>
<column name="request_level" type="varchar(255)"/>
<column name="request_date" type="timestamp with time zone"/>
1 change: 1 addition & 0 deletions src/main/resources/permissions/mod-tlr.csv
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
users.collection.get
users.item.get
dcb.ecs-request.transactions.post
6 changes: 6 additions & 0 deletions src/main/resources/swagger.api/schemas/EcsTlr.yaml
Original file line number Diff line number Diff line change
@@ -43,12 +43,18 @@ EcsTlr:
primaryRequestId:
description: "Primary request ID"
$ref: "uuid.yaml"
primaryRequestDcbTransactionId:
description: "ID of DCB transaction created for primary request"
$ref: "uuid.yaml"
primaryRequestTenantId:
description: "ID of the tenant primary request was created in"
type: string
secondaryRequestId:
description: "Secondary request ID"
$ref: "uuid.yaml"
secondaryRequestDcbTransactionId:
description: "ID of DCB transaction created for secondary request"
$ref: "uuid.yaml"
secondaryRequestTenantId:
description: "ID of the tenant secondary request was created in"
type: string
2 changes: 2 additions & 0 deletions src/test/java/org/folio/api/BaseIT.java
Original file line number Diff line number Diff line change
@@ -72,6 +72,7 @@
@Log4j2
public class BaseIT {
private static final String FOLIO_ENVIRONMENT = "folio";
protected static final String HEADER_TENANT = "x-okapi-tenant";
protected static final String TOKEN = "test_token";
protected static final String TENANT_ID_CONSORTIUM = "consortium"; // central tenant
protected static final String TENANT_ID_UNIVERSITY = "university";
@@ -116,6 +117,7 @@ void beforeEachTest() {
.expectStatus().isNoContent();

contextSetter = initFolioContext();
wireMockServer.resetAll();
}

@AfterEach
7 changes: 4 additions & 3 deletions src/test/java/org/folio/api/EcsTlrApiTest.java
Original file line number Diff line number Diff line change
@@ -58,7 +58,6 @@ void getByIdNotFound() {
@ParameterizedTest
@ValueSource(booleans = {true, false})
void ecsTlrIsCreated(boolean shadowUserExists) {
String instanceRequestId = randomId();
String availableItemId = randomId();
String requesterId = randomId();
EcsTlr ecsTlr = buildEcsTlr(INSTANCE_ID, requesterId);
@@ -78,7 +77,7 @@ void ecsTlrIsCreated(boolean shadowUserExists) {
));

Request mockSecondaryRequestResponse = new Request()
.id(instanceRequestId)
.id(randomId())
.requesterId(requesterId)
.requestLevel(Request.RequestLevelEnum.TITLE)
.requestType(Request.RequestTypeEnum.PAGE)
@@ -132,7 +131,9 @@ void ecsTlrIsCreated(boolean shadowUserExists) {
// 3. Create ECS TLR

EcsTlr expectedPostEcsTlrResponse = fromJsonString(ecsTlrJson, EcsTlr.class)
.secondaryRequestId(instanceRequestId)
.primaryRequestId(mockPrimaryRequestResponse.getId())
.primaryRequestTenantId(TENANT_ID_CONSORTIUM)
.secondaryRequestId(mockSecondaryRequestResponse.getId())
.secondaryRequestTenantId(TENANT_ID_COLLEGE)
.itemId(availableItemId);

168 changes: 142 additions & 26 deletions src/test/java/org/folio/controller/KafkaEventListenerTest.java
Original file line number Diff line number Diff line change
@@ -1,62 +1,178 @@
package org.folio.controller;

import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
import static com.github.tomakehurst.wiremock.client.WireMock.equalToJson;
import static com.github.tomakehurst.wiremock.client.WireMock.exactly;
import static com.github.tomakehurst.wiremock.client.WireMock.jsonResponse;
import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor;
import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.folio.support.MockDataUtils.ITEM_ID;
import static org.folio.support.MockDataUtils.PRIMARY_REQUEST_ID;
import static org.folio.support.MockDataUtils.SECONDARY_REQUEST_ID;
import static org.folio.support.MockDataUtils.getEcsTlrEntity;
import static org.folio.support.MockDataUtils.getMockDataAsString;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.header.Header;
import org.apache.kafka.common.header.internals.RecordHeader;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;

import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

import org.apache.http.HttpStatus;
import org.apache.kafka.clients.consumer.OffsetAndMetadata;
import org.apache.kafka.common.TopicPartition;
import org.awaitility.Awaitility;
import org.folio.api.BaseIT;
import org.folio.domain.dto.DcbTransaction;
import org.folio.domain.dto.TransactionStatusResponse;
import org.folio.domain.entity.EcsTlrEntity;
import org.folio.repository.EcsTlrRepository;
import org.folio.spring.integration.XOkapiHeaders;
import org.folio.spring.service.SystemUserScopedExecutionService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import com.github.tomakehurst.wiremock.client.WireMock;

import lombok.SneakyThrows;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

class KafkaEventListenerTest extends BaseIT {
private static final String UUID_PATTERN =
"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}";
private static final String ECS_REQUEST_TRANSACTIONS_URL = "/ecs-request-transactions";
private static final String POST_ECS_REQUEST_TRANSACTION_URL_PATTERN =
ECS_REQUEST_TRANSACTIONS_URL + "/" + UUID_PATTERN;
private static final String REQUEST_TOPIC_NAME = buildTopicName("circulation", "request");
private static final String REQUEST_UPDATE_EVENT_SAMPLE =
getMockDataAsString("mockdata/kafka/secondary_request_update_event.json");
private static final String CONSUMER_GROUP_ID = "folio-mod-tlr-group";

@Autowired
private EcsTlrRepository ecsTlrRepository;
@Autowired
private SystemUserScopedExecutionService executionService;

@BeforeEach
void beforeEach() {
ecsTlrRepository.deleteAll();
}

@Test
void requestUpdateEventIsConsumed() {
executionService.executeAsyncSystemUserScoped(TENANT_ID_CONSORTIUM,
() -> ecsTlrRepository.save(getEcsTlrEntity()));
EcsTlrEntity newEcsTlr = EcsTlrEntity.builder()
.id(UUID.randomUUID())
.primaryRequestId(PRIMARY_REQUEST_ID)
.primaryRequestTenantId(TENANT_ID_CONSORTIUM)
.secondaryRequestId(SECONDARY_REQUEST_ID)
.secondaryRequestTenantId(TENANT_ID_COLLEGE)
.build();

EcsTlrEntity initialEcsTlr = executionService.executeSystemUserScoped(TENANT_ID_CONSORTIUM,
() -> ecsTlrRepository.save(newEcsTlr));
assertNull(initialEcsTlr.getItemId());

var mockEcsDcbTransactionResponse = new TransactionStatusResponse()
.status(TransactionStatusResponse.StatusEnum.CREATED);
wireMockServer.stubFor(WireMock.post(urlMatching(".*" + POST_ECS_REQUEST_TRANSACTION_URL_PATTERN))
.willReturn(jsonResponse(mockEcsDcbTransactionResponse, HttpStatus.SC_CREATED)));

publishEvent(REQUEST_TOPIC_NAME, REQUEST_UPDATE_EVENT_SAMPLE);

Awaitility.await()
.atMost(30, SECONDS)
.untilAsserted(() ->
executionService.executeAsyncSystemUserScoped(TENANT_ID_CONSORTIUM, () -> {
var updatedEcsTlr = ecsTlrRepository.findBySecondaryRequestId(SECONDARY_REQUEST_ID);
assertTrue(updatedEcsTlr.isPresent());
assertEquals(ITEM_ID, updatedEcsTlr.get().getItemId());
})
);
EcsTlrEntity updatedEcsTlr = executionService.executeSystemUserScoped(TENANT_ID_CONSORTIUM,
() -> Awaitility.await()
.atMost(30, SECONDS)
.until(() -> ecsTlrRepository.findById(initialEcsTlr.getId()),
ecsTlr -> ecsTlr.isPresent() && ITEM_ID.equals(ecsTlr.get().getItemId()))
).orElseThrow();

verifyDcbTransactions(updatedEcsTlr);
}

@Test
void requestUpdateEventIsIgnoredWhenEcsTlrAlreadyHasItemId() {
UUID ecsTlrId = UUID.randomUUID();
EcsTlrEntity initialEcsTlr = EcsTlrEntity.builder()
.id(ecsTlrId)
.primaryRequestId(PRIMARY_REQUEST_ID)
.secondaryRequestId(SECONDARY_REQUEST_ID)
.itemId(ITEM_ID)
.build();

executionService.executeAsyncSystemUserScoped(TENANT_ID_CONSORTIUM,
() -> ecsTlrRepository.save(initialEcsTlr));

var mockEcsDcbTransactionResponse = new TransactionStatusResponse()
.status(TransactionStatusResponse.StatusEnum.CREATED);

wireMockServer.stubFor(WireMock.post(urlMatching(".*" + POST_ECS_REQUEST_TRANSACTION_URL_PATTERN))
.willReturn(jsonResponse(mockEcsDcbTransactionResponse, HttpStatus.SC_CREATED)));

publishEventAndWait(REQUEST_TOPIC_NAME, CONSUMER_GROUP_ID, REQUEST_UPDATE_EVENT_SAMPLE);

EcsTlrEntity ecsTlr = executionService.executeSystemUserScoped(TENANT_ID_CONSORTIUM,
() -> ecsTlrRepository.findById(ecsTlrId)).orElseThrow();
assertEquals(ITEM_ID, ecsTlr.getItemId());
assertNull(ecsTlr.getPrimaryRequestDcbTransactionId());
assertNull(ecsTlr.getSecondaryRequestDcbTransactionId());
wireMockServer.verify(exactly(0), postRequestedFor(urlMatching(
".*" + POST_ECS_REQUEST_TRANSACTION_URL_PATTERN)));
}

private static void verifyDcbTransactions(EcsTlrEntity ecsTlr) {
// UUID primaryRequestDcbTransactionId = ecsTlr.getPrimaryRequestDcbTransactionId();
UUID secondaryRequestDcbTransactionId = ecsTlr.getSecondaryRequestDcbTransactionId();
// assertNotNull(primaryRequestDcbTransactionId);
assertNotNull(secondaryRequestDcbTransactionId);

// DcbTransaction expectedBorrowerTransaction = new DcbTransaction()
// .role(DcbTransaction.RoleEnum.BORROWER)
// .requestId(ecsTlr.getPrimaryRequestId().toString());

DcbTransaction expectedLenderTransaction = new DcbTransaction()
.role(DcbTransaction.RoleEnum.LENDER)
.requestId(ecsTlr.getSecondaryRequestId().toString());

// wireMockServer.verify(
// postRequestedFor(urlMatching(
// ".*" + ECS_REQUEST_TRANSACTIONS_URL + "/" + primaryRequestDcbTransactionId))
// .withHeader(HEADER_TENANT, equalTo(TENANT_ID_CONSORTIUM))
// .withRequestBody(equalToJson(asJsonString(expectedBorrowerTransaction))));

wireMockServer.verify(
postRequestedFor(urlMatching(
".*" + ECS_REQUEST_TRANSACTIONS_URL + "/" + secondaryRequestDcbTransactionId))
.withHeader(HEADER_TENANT, equalTo(TENANT_ID_COLLEGE))
.withRequestBody(equalToJson(asJsonString(expectedLenderTransaction))));
}

@SneakyThrows
private void publishEvent(String topic, String payload) {
List<Header> headers = new ArrayList<>();
headers.add(new RecordHeader(XOkapiHeaders.TENANT,
TENANT_ID_CONSORTIUM.getBytes(StandardCharsets.UTF_8)));
ProducerRecord<String, String> record = new ProducerRecord<>(topic, null,
randomId(), payload, headers);
kafkaTemplate.send(record).get(10, SECONDS);
kafkaTemplate.send(topic, randomId(), payload)
.get(10, SECONDS);
}

@SneakyThrows
private static int getOffset(String topic, String consumerGroup) {
return kafkaAdminClient.listConsumerGroupOffsets(consumerGroup)
.partitionsToOffsetAndMetadata()
.thenApply(partitions -> Optional.ofNullable(partitions.get(new TopicPartition(topic, 0)))
.map(OffsetAndMetadata::offset)
.map(Long::intValue)
.orElse(0))
.get(10, TimeUnit.SECONDS);
}

private void publishEventAndWait(String topic, String consumerGroupId, String payload) {
final int initialOffset = getOffset(topic, consumerGroupId);
publishEvent(topic, payload);
waitForOffset(topic, consumerGroupId, initialOffset + 1);
}

private void waitForOffset(String topic, String consumerGroupId, int expectedOffset) {
Awaitility.await()
.atMost(60, TimeUnit.SECONDS)
.until(() -> getOffset(topic, consumerGroupId), offset -> offset.equals(expectedOffset));
}

}
11 changes: 10 additions & 1 deletion src/test/java/org/folio/service/KafkaEventHandlerImplTest.java
Original file line number Diff line number Diff line change
@@ -3,9 +3,12 @@
import static org.folio.support.MockDataUtils.getEcsTlrEntity;
import static org.folio.support.MockDataUtils.getMockDataAsString;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.util.Optional;

import org.folio.api.BaseIT;
import org.folio.listener.kafka.KafkaEventListener;
import org.folio.repository.EcsTlrRepository;
@@ -17,14 +20,18 @@
import org.springframework.boot.test.mock.mockito.MockBean;

class KafkaEventHandlerImplTest extends BaseIT {
private static final String REQUEST_UPDATE_EVENT_SAMPLE = getMockDataAsString("mockdata/kafka/secondary_request_update_event.json");
private static final String REQUEST_UPDATE_EVENT_SAMPLE =
getMockDataAsString("mockdata/kafka/secondary_request_update_event.json");

@InjectMocks
private KafkaEventHandlerImpl eventHandler;

@InjectMocks
private EcsTlrServiceImpl ecsTlrService;

@MockBean
private DcbService dcbService;

@MockBean
private EcsTlrRepository ecsTlrRepository;

@@ -34,13 +41,15 @@ class KafkaEventHandlerImplTest extends BaseIT {
@Test
void handleRequestUpdateTest() {
when(ecsTlrRepository.findBySecondaryRequestId(any())).thenReturn(Optional.of(getEcsTlrEntity()));
doNothing().when(dcbService).createTransactions(any());
eventListener.handleRequestEvent(REQUEST_UPDATE_EVENT_SAMPLE);
verify(ecsTlrRepository).save(any());
}

@Test
void handleRequestEventWithoutItemIdTest() {
when(ecsTlrRepository.findBySecondaryRequestId(any())).thenReturn(Optional.of(getEcsTlrEntity()));
doNothing().when(dcbService).createTransactions(any());
eventListener.handleRequestEvent(REQUEST_UPDATE_EVENT_SAMPLE);
verify(ecsTlrRepository).save(any());
}
2 changes: 2 additions & 0 deletions src/test/java/org/folio/support/MockDataUtils.java
Original file line number Diff line number Diff line change
@@ -13,12 +13,14 @@

public class MockDataUtils {

public static final UUID PRIMARY_REQUEST_ID = UUID.fromString("398501a2-5c97-4ba6-9ee7-d1cd64339999");
public static final UUID SECONDARY_REQUEST_ID = UUID.fromString("398501a2-5c97-4ba6-9ee7-d1cd6433cb98");
public static final UUID ITEM_ID = UUID.fromString("100d10bf-2f06-4aa0-be15-0b95b2d9f9e3");

public static EcsTlrEntity getEcsTlrEntity() {
return EcsTlrEntity.builder()
.id(UUID.randomUUID())
.primaryRequestId(PRIMARY_REQUEST_ID)
.secondaryRequestId(SECONDARY_REQUEST_ID)
.build();
}