@serenity-js/core 3.0.0-rc.21 → 3.0.0-rc.22

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 CHANGED
@@ -3,6 +3,18 @@
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-rc.22](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.21...v3.0.0-rc.22) (2022-07-15)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **core:** ensure all async operations complete before attempting to dismiss the actors ([635cd9a](https://github.com/serenity-js/serenity-js/commit/635cd9a07481a97017506577e24e92e32a02e0e9)), closes [#1236](https://github.com/serenity-js/serenity-js/issues/1236)
12
+ * **core:** further improvements to stage/actor synchronisation ([1e2e6fb](https://github.com/serenity-js/serenity-js/commit/1e2e6fb5c4ac727d209e1c45d466d0485f4cf548))
13
+
14
+
15
+
16
+
17
+
6
18
  # [3.0.0-rc.21](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.20...v3.0.0-rc.21) (2022-07-11)
7
19
 
8
20
  **Note:** Version bump only for package @serenity-js/core
@@ -242,20 +242,28 @@ class Stage {
242
242
  ? this.actorsOnBackstage.get(name)
243
243
  : this.actorsOnFrontStage.get(name);
244
244
  }
245
- dismiss(activeActors) {
245
+ async dismiss(activeActors) {
246
246
  const actors = Array.from(activeActors.values());
247
247
  if (actors.includes(this.actorInTheSpotlight)) {
248
248
  this.actorInTheSpotlight = undefined;
249
249
  }
250
- return Promise
251
- .all(actors.map(actor => {
252
- const id = model_1.CorrelationId.create();
253
- this.announce(new events_1.AsyncOperationAttempted(new model_1.Description(`[${this.constructor.name}] Dismissing ${actor.name}...`), id));
254
- return actor.dismiss()
255
- .then(() => this.announce(new events_1.AsyncOperationCompleted(new model_1.Description(`[${this.constructor.name}] Dismissed ${actor.name} successfully`), id)))
256
- .catch(error => this.announce(new events_1.AsyncOperationFailed(error, id)));
257
- }))
258
- .then(() => activeActors.clear());
250
+ // Wait for the Photographer to finish taking any screenshots
251
+ await this.manager.waitForAsyncOperationsToComplete();
252
+ const actorsToDismiss = new Map(actors.map(actor => [actor, model_1.CorrelationId.create()]));
253
+ for (const [actor, correlationId] of actorsToDismiss) {
254
+ this.announce(new events_1.AsyncOperationAttempted(new model_1.Description(`[${this.constructor.name}] Dismissing ${actor.name}...`), correlationId));
255
+ }
256
+ // Try to dismiss each actor
257
+ for (const [actor, correlationId] of actorsToDismiss) {
258
+ try {
259
+ await actor.dismiss();
260
+ this.announce(new events_1.AsyncOperationCompleted(new model_1.Description(`[${this.constructor.name}] Dismissed ${actor.name} successfully`), correlationId));
261
+ }
262
+ catch (error) {
263
+ this.announce(new events_1.AsyncOperationFailed(error, correlationId)); // todo: serialise the error!
264
+ }
265
+ }
266
+ activeActors.clear();
259
267
  }
260
268
  /**
261
269
  * @private
@@ -1 +1 @@
1
- {"version":3,"file":"Stage.js","sourceRoot":"","sources":["../../src/stage/Stage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Stage.js","sourceRoot":"","sources":["../../src/stage/Stage.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ export declare class StageManager {
11
11
  register(...subscribers: ListensToDomainEvents[]): void;
12
12
  deregister(subscriber: ListensToDomainEvents): void;
13
13
  notifyOf(event: DomainEvent): void;
14
+ waitForAsyncOperationsToComplete(): Promise<void>;
14
15
  waitForNextCue(): Promise<void>;
15
16
  currentTime(): Timestamp;
16
17
  }
@@ -19,35 +19,32 @@ class StageManager {
19
19
  this.wip.recordIfAsync(event);
20
20
  this.subscribers.forEach(crewMember => crewMember.notifyOf(event));
21
21
  }
22
- waitForNextCue() {
22
+ waitForAsyncOperationsToComplete() {
23
23
  return new Promise((resolve, reject) => {
24
24
  const timeout = setTimeout(() => {
25
25
  clearInterval(interval);
26
- if (this.wip.hasFailedOperations()) {
27
- const error = new Error(this.wip.descriptionOfFailedOperations());
28
- this.wip.resetFailedOperations();
29
- return reject(error);
30
- }
31
- if (this.wip.hasActiveOperations()) {
32
- const error = new Error(this.wip.descriptionOfTimedOutOperations());
33
- return reject(error);
34
- }
35
- // "else" can't happen because this case is covered by the interval check below
26
+ return resolve();
36
27
  }, this.cueTimeout.inMilliseconds());
37
28
  const interval = setInterval(() => {
38
29
  if (this.wip.hasAllOperationsCompleted()) {
39
30
  clearTimeout(timeout);
40
31
  clearInterval(interval);
41
- if (this.wip.hasFailedOperations()) {
42
- const error = new Error(this.wip.descriptionOfFailedOperations());
43
- this.wip.resetFailedOperations();
44
- return reject(error);
45
- }
46
32
  return resolve();
47
33
  }
48
34
  }, 10);
49
35
  });
50
36
  }
37
+ async waitForNextCue() {
38
+ await this.waitForAsyncOperationsToComplete();
39
+ if (this.wip.hasFailedOperations()) {
40
+ const error = new Error(this.wip.descriptionOfFailedOperations());
41
+ this.wip.resetFailedOperations();
42
+ throw error;
43
+ }
44
+ if (this.wip.hasActiveOperations()) {
45
+ throw new Error(this.wip.descriptionOfTimedOutOperations());
46
+ }
47
+ }
51
48
  currentTime() {
52
49
  return this.clock.now();
53
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"StageManager.js","sourceRoot":"","sources":["../../src/stage/StageManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StageManager.js","sourceRoot":"","sources":["../../src/stage/StageManager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serenity-js/core",
3
- "version": "3.0.0-rc.21",
3
+ "version": "3.0.0-rc.22",
4
4
  "description": "Serenity/JS Screenplay, reporting engine and core interfaces.",
5
5
  "author": {
6
6
  "name": "Jan Molak",
@@ -71,5 +71,5 @@
71
71
  "node": "^14 || ^16",
72
72
  "npm": "^6 || ^7 || ^8"
73
73
  },
74
- "gitHead": "ddf72178856dd97ee448029f5029236c3c8b8c8b"
74
+ "gitHead": "3eb059a552b02c3ef7ee3cf2d8dcaaba9fcb2059"
75
75
  }
@@ -285,34 +285,42 @@ export class Stage {
285
285
  : this.actorsOnFrontStage.get(name)
286
286
  }
287
287
 
288
- private dismiss(activeActors: Map<string, Actor>): Promise<void> {
288
+ private async dismiss(activeActors: Map<string, Actor>): Promise<void> {
289
289
  const actors = Array.from(activeActors.values());
290
290
 
291
291
  if (actors.includes(this.actorInTheSpotlight)) {
292
292
  this.actorInTheSpotlight = undefined;
293
293
  }
294
294
 
295
- return Promise
296
- .all(actors.map(actor => {
297
- const id = CorrelationId.create();
295
+ // Wait for the Photographer to finish taking any screenshots
298
296
 
299
- this.announce(new AsyncOperationAttempted(
300
- new Description(`[${ this.constructor.name }] Dismissing ${ actor.name }...`),
301
- id,
297
+ await this.manager.waitForAsyncOperationsToComplete();
298
+
299
+ const actorsToDismiss = new Map<Actor, CorrelationId>(actors.map(actor => [actor, CorrelationId.create()]));
300
+
301
+ for (const [ actor, correlationId ] of actorsToDismiss) {
302
+ this.announce(new AsyncOperationAttempted(
303
+ new Description(`[${ this.constructor.name }] Dismissing ${ actor.name }...`),
304
+ correlationId,
305
+ ));
306
+ }
307
+
308
+ // Try to dismiss each actor
309
+ for (const [ actor, correlationId ] of actorsToDismiss) {
310
+ try {
311
+ await actor.dismiss();
312
+
313
+ this.announce(new AsyncOperationCompleted(
314
+ new Description(`[${ this.constructor.name }] Dismissed ${ actor.name } successfully`),
315
+ correlationId,
302
316
  ));
317
+ }
318
+ catch (error) {
319
+ this.announce(new AsyncOperationFailed(error, correlationId)); // todo: serialise the error!
320
+ }
321
+ }
303
322
 
304
- return actor.dismiss()
305
- .then(() =>
306
- this.announce(new AsyncOperationCompleted(
307
- new Description(`[${ this.constructor.name }] Dismissed ${ actor.name } successfully`),
308
- id,
309
- )))
310
- .catch(error =>
311
- this.announce(new AsyncOperationFailed(error, id)), // todo: serialise the error!
312
- );
313
-
314
- }))
315
- .then(() => activeActors.clear());
323
+ activeActors.clear();
316
324
  }
317
325
 
318
326
  /**
@@ -25,28 +25,13 @@ export class StageManager {
25
25
  this.subscribers.forEach(crewMember => crewMember.notifyOf(event));
26
26
  }
27
27
 
28
- waitForNextCue(): Promise<void> {
28
+ waitForAsyncOperationsToComplete(): Promise<void> {
29
29
  return new Promise((resolve, reject) => {
30
30
 
31
31
  const timeout = setTimeout(() => {
32
32
  clearInterval(interval);
33
33
 
34
- if (this.wip.hasFailedOperations()) {
35
- const error = new Error(this.wip.descriptionOfFailedOperations());
36
-
37
- this.wip.resetFailedOperations();
38
-
39
- return reject(error);
40
- }
41
-
42
- if (this.wip.hasActiveOperations()) {
43
- const error = new Error(this.wip.descriptionOfTimedOutOperations());
44
-
45
- return reject(error);
46
- }
47
-
48
- // "else" can't happen because this case is covered by the interval check below
49
-
34
+ return resolve();
50
35
  }, this.cueTimeout.inMilliseconds());
51
36
 
52
37
  const interval = setInterval(() => {
@@ -54,21 +39,29 @@ export class StageManager {
54
39
  clearTimeout(timeout);
55
40
  clearInterval(interval);
56
41
 
57
- if (this.wip.hasFailedOperations()) {
58
-
59
- const error = new Error(this.wip.descriptionOfFailedOperations());
60
-
61
- this.wip.resetFailedOperations();
62
-
63
- return reject(error);
64
- }
65
-
66
42
  return resolve();
67
43
  }
68
44
  }, 10);
69
45
  });
70
46
  }
71
47
 
48
+ async waitForNextCue(): Promise<void> {
49
+
50
+ await this.waitForAsyncOperationsToComplete();
51
+
52
+ if (this.wip.hasFailedOperations()) {
53
+ const error = new Error(this.wip.descriptionOfFailedOperations());
54
+
55
+ this.wip.resetFailedOperations();
56
+
57
+ throw error;
58
+ }
59
+
60
+ if (this.wip.hasActiveOperations()) {
61
+ throw new Error(this.wip.descriptionOfTimedOutOperations());
62
+ }
63
+ }
64
+
72
65
  currentTime(): Timestamp {
73
66
  return this.clock.now();
74
67
  }