@reventlessdev/online-shop-aggregates-catalog 3.0.0-alpha.263 → 3.0.0-alpha.265
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/lib/bs/.compiler.log +2 -2
- package/lib/bs/CatalogPlugin.cmi +0 -0
- package/lib/bs/CatalogPlugin.cmt +0 -0
- package/lib/bs/CatalogPlugin.mlmap +1 -0
- package/lib/bs/compiler-info.json +1 -1
- package/lib/bs/src/Category/Aggregate/Category-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/Category/Aggregate/Category-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/Category/Aggregate/Category.ast +0 -0
- package/lib/bs/src/Category/Aggregate/Category.res +1 -1
- package/lib/bs/src/Category/Aggregate/Category.res.mjs +1 -1
- package/lib/bs/src/Category/Aggregate/Category_Behavior-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/Category/Aggregate/Category_Behavior-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/Category/CategoryId-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/Category/CategoryId-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/Category/ReadModel/Categories-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/Category/ReadModel/Categories-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/Category/ReadModel/Categories.ast +0 -0
- package/lib/bs/src/Category/ReadModel/Categories_Projections-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/Category/ReadModel/Categories_Projections-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/Extension/Orders_Extension-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/Extension/Orders_Extension-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/ExtensionPoint/Products_ExtensionPointMapping-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/ExtensionPoint/Products_ExtensionPointMapping-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/LifecycleModel-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/LifecycleModel-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/Plugin-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/Plugin-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/Product/Aggregate/Product-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/Product/Aggregate/Product-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/Product/Aggregate/Product.ast +0 -0
- package/lib/bs/src/Product/Aggregate/Product_Behavior-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/Product/Aggregate/Product_Behavior-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/Product/ReadModel/Products-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/Product/ReadModel/Products-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/Product/ReadModel/Products.ast +0 -0
- package/lib/bs/src/Product/ReadModel/Products_Projections-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/Product/ReadModel/Products_Projections-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/ProductDemand/Aggregate/ProductDemand-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/ProductDemand/Aggregate/ProductDemand-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/ProductDemand/Aggregate/ProductDemand.ast +0 -0
- package/lib/bs/src/ProductDemand/Aggregate/ProductDemand_Behavior-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/ProductDemand/Aggregate/ProductDemand_Behavior-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/ProductDemand/ReadModel/ProductDemands-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/ProductDemand/ReadModel/ProductDemands-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/ProductDemand/ReadModel/ProductDemands.ast +0 -0
- package/lib/bs/src/ProductDemand/ReadModel/ProductDemands_Projections-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/ProductDemand/ReadModel/ProductDemands_Projections-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/Roles-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/Roles-CatalogPlugin.cmj +0 -0
- package/lib/bs/src/Roles-CatalogPlugin.cmt +0 -0
- package/lib/bs/src/Roles.ast +0 -0
- package/lib/bs/src/Roles.res +2 -0
- package/lib/bs/src/Roles.res.mjs +2 -0
- package/lib/bs/src/Task/ImportProducts-CatalogPlugin.cmi +0 -0
- package/lib/bs/src/Task/ImportProducts-CatalogPlugin.cmt +0 -0
- package/lib/bs/tests/Catalog_Examples-CatalogPlugin.cmi +0 -0
- package/lib/bs/tests/Catalog_Examples-CatalogPlugin.cmt +0 -0
- package/lib/bs/tests/Catalog_Examples.ast +0 -0
- package/lib/bs/tests/Catalog_Examples.res +1 -0
- package/lib/bs/tests/Catalog_Examples.res.mjs +3 -0
- package/lib/bs/tests/Category/Aggregate/Category_GWT-CatalogPlugin.cmi +0 -0
- package/lib/bs/tests/Category/Aggregate/Category_GWT-CatalogPlugin.cmt +0 -0
- package/lib/bs/tests/Category/Aggregate/Category_GWT.ast +0 -0
- package/lib/bs/tests/Category/Aggregate/Category_GWT.res +26 -0
- package/lib/bs/tests/Category/Aggregate/Category_GWT.res.mjs +28 -2
- package/lib/bs/tests/Category/ReadModel/Categories_GWT-CatalogPlugin.cmi +0 -0
- package/lib/bs/tests/Category/ReadModel/Categories_GWT-CatalogPlugin.cmt +0 -0
- package/lib/bs/tests/Extension/Orders_Extension_GWT-CatalogPlugin.cmi +0 -0
- package/lib/bs/tests/Extension/Orders_Extension_GWT-CatalogPlugin.cmt +0 -0
- package/lib/bs/tests/ExtensionPoint/Products_ExtensionPointMapping_GWT-CatalogPlugin.cmi +0 -0
- package/lib/bs/tests/ExtensionPoint/Products_ExtensionPointMapping_GWT-CatalogPlugin.cmt +0 -0
- package/lib/bs/tests/Product/Aggregate/Product_GWT-CatalogPlugin.cmi +0 -0
- package/lib/bs/tests/Product/Aggregate/Product_GWT-CatalogPlugin.cmt +0 -0
- package/lib/bs/tests/Product/Aggregate/Product_GWT.res.mjs +13 -2
- package/lib/bs/tests/Product/ReadModel/Products_GWT-CatalogPlugin.cmi +0 -0
- package/lib/bs/tests/Product/ReadModel/Products_GWT-CatalogPlugin.cmt +0 -0
- package/lib/bs/tests/ProductDemand/Aggregate/ProductDemand_GWT-CatalogPlugin.cmi +0 -0
- package/lib/bs/tests/ProductDemand/Aggregate/ProductDemand_GWT-CatalogPlugin.cmt +0 -0
- package/lib/bs/tests/ProductDemand/Aggregate/ProductDemand_GWT.res.mjs +13 -2
- package/lib/bs/tests/ProductDemand/ReadModel/ProductDemands_GWT-CatalogPlugin.cmi +0 -0
- package/lib/bs/tests/ProductDemand/ReadModel/ProductDemands_GWT-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/.compiler.log +2 -2
- package/lib/ocaml/CatalogPlugin.cmi +0 -0
- package/lib/ocaml/CatalogPlugin.cmt +0 -0
- package/lib/ocaml/CatalogPlugin.mlmap +1 -0
- package/lib/ocaml/Catalog_Examples-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Catalog_Examples-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Catalog_Examples.ast +0 -0
- package/lib/ocaml/Catalog_Examples.res +1 -0
- package/lib/ocaml/Categories-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Categories-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Categories.ast +0 -0
- package/lib/ocaml/Categories_GWT-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Categories_GWT-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Categories_Projections-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Categories_Projections-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Category-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Category-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Category.ast +0 -0
- package/lib/ocaml/Category.res +1 -1
- package/lib/ocaml/CategoryId-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/CategoryId-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Category_Behavior-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Category_Behavior-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Category_GWT-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Category_GWT-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Category_GWT.ast +0 -0
- package/lib/ocaml/Category_GWT.res +26 -0
- package/lib/ocaml/ImportProducts-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/ImportProducts-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/LifecycleModel-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/LifecycleModel-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Orders_Extension-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Orders_Extension-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Orders_Extension_GWT-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Orders_Extension_GWT-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Plugin-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Plugin-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Product-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Product-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Product.ast +0 -0
- package/lib/ocaml/ProductDemand-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/ProductDemand-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/ProductDemand.ast +0 -0
- package/lib/ocaml/ProductDemand_Behavior-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/ProductDemand_Behavior-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/ProductDemand_GWT-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/ProductDemand_GWT-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/ProductDemands-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/ProductDemands-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/ProductDemands.ast +0 -0
- package/lib/ocaml/ProductDemands_GWT-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/ProductDemands_GWT-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/ProductDemands_Projections-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/ProductDemands_Projections-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Product_Behavior-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Product_Behavior-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Product_GWT-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Product_GWT-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Products-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Products-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Products.ast +0 -0
- package/lib/ocaml/Products_ExtensionPointMapping-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Products_ExtensionPointMapping-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Products_ExtensionPointMapping_GWT-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Products_ExtensionPointMapping_GWT-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Products_GWT-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Products_GWT-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Products_Projections-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Products_Projections-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Roles-CatalogPlugin.cmi +0 -0
- package/lib/ocaml/Roles-CatalogPlugin.cmj +0 -0
- package/lib/ocaml/Roles-CatalogPlugin.cmt +0 -0
- package/lib/ocaml/Roles.ast +0 -0
- package/lib/ocaml/Roles.res +2 -0
- package/package.json +8 -8
- package/src/Category/Aggregate/Category.res +1 -1
- package/src/Category/Aggregate/Category.res.mjs +1 -1
- package/src/Roles.res +2 -0
- package/src/Roles.res.mjs +2 -0
- package/tests/Catalog_Examples.res +1 -0
- package/tests/Catalog_Examples.res.mjs +3 -0
- package/tests/Category/Aggregate/Category_GWT.res +26 -0
- package/tests/Category/Aggregate/Category_GWT.res.mjs +28 -2
- package/tests/Product/Aggregate/Product_GWT.res.mjs +13 -2
- package/tests/ProductDemand/Aggregate/ProductDemand_GWT.res.mjs +13 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,29 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# 3.0.0-alpha.265 (2026-10-01)
|
|
7
|
+
|
|
8
|
+
* feat!: roles a plugin declares, groups a platform provides ([43daace](https://github.com/ReventlessDev/reventless-core/commit/43daace6ca588afe22562d079af1e6f1da81942e))
|
|
9
|
+
|
|
10
|
+
### BREAKING CHANGES
|
|
11
|
+
|
|
12
|
+
* AllowGroups and AdminGroup are removed — write AllowRoles over
|
|
13
|
+
the plugin's Roles.t, and use Role.admin / Platform.adminGroup(). Spec module
|
|
14
|
+
types declare `type role`, and their rules are Authorization.rule<role>; a spec
|
|
15
|
+
that writes its own rule declares `type role` (Reventless.Role.name for a rule
|
|
16
|
+
over Authorization.permission). Role.name is a private string: make one from a
|
|
17
|
+
string with Role.make.
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# 3.0.0-alpha.264 (2026-10-01)
|
|
22
|
+
|
|
23
|
+
**Note:** Version bump only for package @reventlessdev/online-shop-aggregates-catalog
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
6
29
|
# 3.0.0-alpha.263 (2026-09-29)
|
|
7
30
|
|
|
8
31
|
**Note:** Version bump only for package @reventlessdev/online-shop-aggregates-catalog
|
package/lib/bs/.compiler.log
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
#Start(
|
|
2
|
-
#Done(
|
|
1
|
+
#Start(1790854925300)
|
|
2
|
+
#Done(1790854931571)
|
package/lib/bs/CatalogPlugin.cmi
CHANGED
|
Binary file
|
package/lib/bs/CatalogPlugin.cmt
CHANGED
|
Binary file
|
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
"bsc_hash": "1006241435e8d5052329c523202a7fe6359a37e1e1688c023d37d6a7ebb5fb6d",
|
|
5
5
|
"rescript_config_hash": "50d5358a2cbe328e82ae9b442e4615b86dbfe6b2ce05e9eca04a0c78da0e4708",
|
|
6
6
|
"runtime_path": "/home/runner/work/reventless-core/reventless-core/node_modules/@rescript/runtime",
|
|
7
|
-
"generated_at": "
|
|
7
|
+
"generated_at": "1790854931587"
|
|
8
8
|
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -59,3 +59,29 @@ describe("Category Behavior", () => {
|
|
|
59
59
|
->thenNoEvent
|
|
60
60
|
)
|
|
61
61
|
})
|
|
62
|
+
|
|
63
|
+
describe("Who may Archive", () => {
|
|
64
|
+
// scenario-id: 5164cae5-bd41-4802-aa03-3d42b3e2fb9f
|
|
65
|
+
test("an Admin may archive a category", () =>
|
|
66
|
+
givenEvents([Added({name: electronics})])
|
|
67
|
+
->asCaller(Caller.inRoles([Admin]))
|
|
68
|
+
->whenCmd(Archive)
|
|
69
|
+
->thenEvent(Archived)
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
// scenario-id: 92a627eb-e78c-48ed-88f4-5065dc505885
|
|
73
|
+
test("a shopper may not archive a category", () =>
|
|
74
|
+
givenEvents([Added({name: electronics})])
|
|
75
|
+
->asCaller(Caller.owner(shopper))
|
|
76
|
+
->whenCmd(Archive)
|
|
77
|
+
->thenRefused
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
// scenario-id: c4c8e733-7e07-4f3c-b3f2-01bc6b52f601
|
|
81
|
+
test("an anonymous caller may not archive a category", () =>
|
|
82
|
+
givenEvents([Added({name: electronics})])
|
|
83
|
+
->asCaller(Caller.anonymous)
|
|
84
|
+
->whenCmd(Archive)
|
|
85
|
+
->thenRefused
|
|
86
|
+
)
|
|
87
|
+
})
|
|
@@ -9,13 +9,15 @@ let include = Behavior_GWT$ReventlessGwt.MakeFromAggregate({
|
|
|
9
9
|
name: Category$CatalogPlugin.name,
|
|
10
10
|
commandSchema: Category$CatalogPlugin.commandSchema,
|
|
11
11
|
eventSchema: Category$CatalogPlugin.eventSchema,
|
|
12
|
-
errorSchema: Category$CatalogPlugin.errorSchema
|
|
12
|
+
errorSchema: Category$CatalogPlugin.errorSchema,
|
|
13
|
+
commandAuthorization: Category$CatalogPlugin.commandAuthorization
|
|
13
14
|
})({
|
|
14
15
|
Spec: {
|
|
15
16
|
name: Category$CatalogPlugin.name,
|
|
16
17
|
commandSchema: Category$CatalogPlugin.commandSchema,
|
|
17
18
|
eventSchema: Category$CatalogPlugin.eventSchema,
|
|
18
|
-
errorSchema: Category$CatalogPlugin.errorSchema
|
|
19
|
+
errorSchema: Category$CatalogPlugin.errorSchema,
|
|
20
|
+
commandAuthorization: Category$CatalogPlugin.commandAuthorization
|
|
19
21
|
},
|
|
20
22
|
initialState: Category_Behavior$CatalogPlugin.initialState,
|
|
21
23
|
evolve: Category_Behavior$CatalogPlugin.evolve,
|
|
@@ -30,6 +32,10 @@ let test = include.test;
|
|
|
30
32
|
|
|
31
33
|
let givenEvents = include.givenEvents;
|
|
32
34
|
|
|
35
|
+
let Caller = include.Caller;
|
|
36
|
+
|
|
37
|
+
let asCaller = include.asCaller;
|
|
38
|
+
|
|
33
39
|
let whenCmd = include.whenCmd;
|
|
34
40
|
|
|
35
41
|
let thenEvent = include.thenEvent;
|
|
@@ -38,6 +44,8 @@ let thenNoEvent = include.thenNoEvent;
|
|
|
38
44
|
|
|
39
45
|
let thenError = include.thenError;
|
|
40
46
|
|
|
47
|
+
let thenRefused = include.thenRefused;
|
|
48
|
+
|
|
41
49
|
describe("Category Behavior", () => {
|
|
42
50
|
test("Add on new aggregate produces Added", () => thenEvent(whenCmd(givenEvents([]), {
|
|
43
51
|
TAG: "Add",
|
|
@@ -97,6 +105,21 @@ describe("Category Behavior", () => {
|
|
|
97
105
|
]), "Archive")));
|
|
98
106
|
});
|
|
99
107
|
|
|
108
|
+
describe("Who may Archive", () => {
|
|
109
|
+
test("an Admin may archive a category", () => thenEvent(whenCmd(asCaller(givenEvents([{
|
|
110
|
+
TAG: "Added",
|
|
111
|
+
name: Catalog_Examples$CatalogPlugin.electronics
|
|
112
|
+
}]), Caller.inRoles(["Admin"])), "Archive"), "Archived"));
|
|
113
|
+
test("a shopper may not archive a category", () => thenRefused(whenCmd(asCaller(givenEvents([{
|
|
114
|
+
TAG: "Added",
|
|
115
|
+
name: Catalog_Examples$CatalogPlugin.electronics
|
|
116
|
+
}]), Caller.owner(Catalog_Examples$CatalogPlugin.shopper, undefined)), "Archive")));
|
|
117
|
+
test("an anonymous caller may not archive a category", () => thenRefused(whenCmd(asCaller(givenEvents([{
|
|
118
|
+
TAG: "Added",
|
|
119
|
+
name: Catalog_Examples$CatalogPlugin.electronics
|
|
120
|
+
}]), Caller.anonymous), "Archive")));
|
|
121
|
+
});
|
|
122
|
+
|
|
100
123
|
let Spec = include.Spec;
|
|
101
124
|
|
|
102
125
|
let thenCompareEvent = include.thenCompareEvent;
|
|
@@ -114,6 +137,8 @@ export {
|
|
|
114
137
|
describe,
|
|
115
138
|
test,
|
|
116
139
|
givenEvents,
|
|
140
|
+
Caller,
|
|
141
|
+
asCaller,
|
|
117
142
|
whenCmd,
|
|
118
143
|
thenEvent,
|
|
119
144
|
thenCompareEvent,
|
|
@@ -123,5 +148,6 @@ export {
|
|
|
123
148
|
thenCompareEvents,
|
|
124
149
|
thenEventsWithError,
|
|
125
150
|
thenError,
|
|
151
|
+
thenRefused,
|
|
126
152
|
}
|
|
127
153
|
/* include Not a pure module */
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -9,13 +9,15 @@ let include = Behavior_GWT$ReventlessGwt.MakeFromAggregate({
|
|
|
9
9
|
name: Product$CatalogPlugin.name,
|
|
10
10
|
commandSchema: Product$CatalogPlugin.commandSchema,
|
|
11
11
|
eventSchema: Product$CatalogPlugin.eventSchema,
|
|
12
|
-
errorSchema: Product$CatalogPlugin.errorSchema
|
|
12
|
+
errorSchema: Product$CatalogPlugin.errorSchema,
|
|
13
|
+
commandAuthorization: Product$CatalogPlugin.commandAuthorization
|
|
13
14
|
})({
|
|
14
15
|
Spec: {
|
|
15
16
|
name: Product$CatalogPlugin.name,
|
|
16
17
|
commandSchema: Product$CatalogPlugin.commandSchema,
|
|
17
18
|
eventSchema: Product$CatalogPlugin.eventSchema,
|
|
18
|
-
errorSchema: Product$CatalogPlugin.errorSchema
|
|
19
|
+
errorSchema: Product$CatalogPlugin.errorSchema,
|
|
20
|
+
commandAuthorization: Product$CatalogPlugin.commandAuthorization
|
|
19
21
|
},
|
|
20
22
|
initialState: Product_Behavior$CatalogPlugin.initialState,
|
|
21
23
|
evolve: Product_Behavior$CatalogPlugin.evolve,
|
|
@@ -125,6 +127,10 @@ describe("Product Behavior", () => {
|
|
|
125
127
|
|
|
126
128
|
let Spec = include.Spec;
|
|
127
129
|
|
|
130
|
+
let Caller = include.Caller;
|
|
131
|
+
|
|
132
|
+
let asCaller = include.asCaller;
|
|
133
|
+
|
|
128
134
|
let thenCompareEvent = include.thenCompareEvent;
|
|
129
135
|
|
|
130
136
|
let thenEventWithError = include.thenEventWithError;
|
|
@@ -135,11 +141,15 @@ let thenCompareEvents = include.thenCompareEvents;
|
|
|
135
141
|
|
|
136
142
|
let thenEventsWithError = include.thenEventsWithError;
|
|
137
143
|
|
|
144
|
+
let thenRefused = include.thenRefused;
|
|
145
|
+
|
|
138
146
|
export {
|
|
139
147
|
Spec,
|
|
140
148
|
describe,
|
|
141
149
|
test,
|
|
142
150
|
givenEvents,
|
|
151
|
+
Caller,
|
|
152
|
+
asCaller,
|
|
143
153
|
whenCmd,
|
|
144
154
|
thenEvent,
|
|
145
155
|
thenCompareEvent,
|
|
@@ -149,6 +159,7 @@ export {
|
|
|
149
159
|
thenCompareEvents,
|
|
150
160
|
thenEventsWithError,
|
|
151
161
|
thenError,
|
|
162
|
+
thenRefused,
|
|
152
163
|
added,
|
|
153
164
|
}
|
|
154
165
|
/* include Not a pure module */
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -9,13 +9,15 @@ let include = Behavior_GWT$ReventlessGwt.MakeFromAggregate({
|
|
|
9
9
|
name: ProductDemand$CatalogPlugin.name,
|
|
10
10
|
commandSchema: ProductDemand$CatalogPlugin.commandSchema,
|
|
11
11
|
eventSchema: ProductDemand$CatalogPlugin.eventSchema,
|
|
12
|
-
errorSchema: ProductDemand$CatalogPlugin.errorSchema
|
|
12
|
+
errorSchema: ProductDemand$CatalogPlugin.errorSchema,
|
|
13
|
+
commandAuthorization: ProductDemand$CatalogPlugin.commandAuthorization
|
|
13
14
|
})({
|
|
14
15
|
Spec: {
|
|
15
16
|
name: ProductDemand$CatalogPlugin.name,
|
|
16
17
|
commandSchema: ProductDemand$CatalogPlugin.commandSchema,
|
|
17
18
|
eventSchema: ProductDemand$CatalogPlugin.eventSchema,
|
|
18
|
-
errorSchema: ProductDemand$CatalogPlugin.errorSchema
|
|
19
|
+
errorSchema: ProductDemand$CatalogPlugin.errorSchema,
|
|
20
|
+
commandAuthorization: ProductDemand$CatalogPlugin.commandAuthorization
|
|
19
21
|
},
|
|
20
22
|
initialState: ProductDemand_Behavior$CatalogPlugin.initialState,
|
|
21
23
|
evolve: ProductDemand_Behavior$CatalogPlugin.evolve,
|
|
@@ -86,6 +88,10 @@ describe("ProductDemand Behavior", () => {
|
|
|
86
88
|
|
|
87
89
|
let Spec = include.Spec;
|
|
88
90
|
|
|
91
|
+
let Caller = include.Caller;
|
|
92
|
+
|
|
93
|
+
let asCaller = include.asCaller;
|
|
94
|
+
|
|
89
95
|
let thenCompareEvent = include.thenCompareEvent;
|
|
90
96
|
|
|
91
97
|
let thenEventWithError = include.thenEventWithError;
|
|
@@ -98,11 +104,15 @@ let thenEventsWithError = include.thenEventsWithError;
|
|
|
98
104
|
|
|
99
105
|
let thenError = include.thenError;
|
|
100
106
|
|
|
107
|
+
let thenRefused = include.thenRefused;
|
|
108
|
+
|
|
101
109
|
export {
|
|
102
110
|
Spec,
|
|
103
111
|
describe,
|
|
104
112
|
test,
|
|
105
113
|
givenEvents,
|
|
114
|
+
Caller,
|
|
115
|
+
asCaller,
|
|
106
116
|
whenCmd,
|
|
107
117
|
thenEvent,
|
|
108
118
|
thenCompareEvent,
|
|
@@ -112,5 +122,6 @@ export {
|
|
|
112
122
|
thenCompareEvents,
|
|
113
123
|
thenEventsWithError,
|
|
114
124
|
thenError,
|
|
125
|
+
thenRefused,
|
|
115
126
|
}
|
|
116
127
|
/* include Not a pure module */
|
|
Binary file
|
|
Binary file
|
package/lib/ocaml/.compiler.log
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
#Start(
|
|
2
|
-
#Done(
|
|
1
|
+
#Start(1790854925300)
|
|
2
|
+
#Done(1790854931571)
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/lib/ocaml/Categories.ast
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/lib/ocaml/Category.ast
CHANGED
|
Binary file
|
package/lib/ocaml/Category.res
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -59,3 +59,29 @@ describe("Category Behavior", () => {
|
|
|
59
59
|
->thenNoEvent
|
|
60
60
|
)
|
|
61
61
|
})
|
|
62
|
+
|
|
63
|
+
describe("Who may Archive", () => {
|
|
64
|
+
// scenario-id: 5164cae5-bd41-4802-aa03-3d42b3e2fb9f
|
|
65
|
+
test("an Admin may archive a category", () =>
|
|
66
|
+
givenEvents([Added({name: electronics})])
|
|
67
|
+
->asCaller(Caller.inRoles([Admin]))
|
|
68
|
+
->whenCmd(Archive)
|
|
69
|
+
->thenEvent(Archived)
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
// scenario-id: 92a627eb-e78c-48ed-88f4-5065dc505885
|
|
73
|
+
test("a shopper may not archive a category", () =>
|
|
74
|
+
givenEvents([Added({name: electronics})])
|
|
75
|
+
->asCaller(Caller.owner(shopper))
|
|
76
|
+
->whenCmd(Archive)
|
|
77
|
+
->thenRefused
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
// scenario-id: c4c8e733-7e07-4f3c-b3f2-01bc6b52f601
|
|
81
|
+
test("an anonymous caller may not archive a category", () =>
|
|
82
|
+
givenEvents([Added({name: electronics})])
|
|
83
|
+
->asCaller(Caller.anonymous)
|
|
84
|
+
->whenCmd(Archive)
|
|
85
|
+
->thenRefused
|
|
86
|
+
)
|
|
87
|
+
})
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|