Skip to content

Commit

Permalink
Objects can be released in batch (#133)
Browse files Browse the repository at this point in the history
  • Loading branch information
mroloux authored Oct 18, 2024
1 parent 2f7b46c commit 31dbe58
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 55 deletions.
5 changes: 4 additions & 1 deletion src/Events/Events.php
Original file line number Diff line number Diff line change
Expand Up @@ -417,9 +417,12 @@ public function changeObjectStatusInBatch(array $statusChangeRequests): array
private function serializeStatusChangeRequest($statusChangeRequest)
{
$request = new stdClass();
$request->type = $statusChangeRequest->type;
$request->event = $statusChangeRequest->event;
$request->objects = self::normalizeObjects($statusChangeRequest->objectOrObjects);
$request->status = $statusChangeRequest->status;
if ($statusChangeRequest->type == StatusChangeRequest::$TYPE_CHANGE_STATUS_TO) {
$request->status = $statusChangeRequest->status;
}
if ($statusChangeRequest->holdToken !== null) {
$request->holdToken = $statusChangeRequest->holdToken;
}
Expand Down
54 changes: 52 additions & 2 deletions src/Events/StatusChangeRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@

class StatusChangeRequest
{

public static $TYPE_CHANGE_STATUS_TO = "CHANGE_STATUS_TO";
public static $TYPE_RELEASE = "RELEASE";

/**
* @var string
*/
public $type = "CHANGE_STATUS_TO";

/**
* @var string
*/
Expand Down Expand Up @@ -54,17 +63,58 @@ class StatusChangeRequest
*/
public $rejectedPreviousStatuses;

public function __construct(string $event, $objectOrObjects, string $status, string $holdToken = null, string $orderId = null, bool $keepExtraData = null, bool $ignoreChannels = null, array $channelKeys = null, array $allowedPreviousStatuses = null, array $rejectedPreviousStatuses = null)
{
public function setType(string $type) {
$this->type = $type;
return $this;
}

public function setEvent(string $event) {
$this->event = $event;
return $this;
}

public function setObjectOrObjects($objectOrObjects) {
$this->objectOrObjects = $objectOrObjects;
return $this;
}

public function setStatus(string $status) {
$this->status = $status;
return $this;
}

public function setHoldToken(string $holdToken) {
$this->holdToken = $holdToken;
return $this;
}

public function setOrderId(string $orderId) {
$this->orderId = $orderId;
return $this;
}

public function setKeepExtraData(bool $keepExtraData) {
$this->keepExtraData = $keepExtraData;
return $this;
}

public function setIgnoreChannels(bool $ignoreChannels) {
$this->ignoreChannels = $ignoreChannels;
return $this;
}

public function setChannelKeys(array $channelKeys) {
$this->channelKeys = $channelKeys;
return $this;
}

public function setAllowedPreviousStatuses(array $allowedPreviousStatuses) {
$this->allowedPreviousStatuses = $allowedPreviousStatuses;
return $this;
}

public function setRejectedPreviousStatuses(array $rejectedPreviousStatuses) {
$this->rejectedPreviousStatuses = $rejectedPreviousStatuses;
return $this;
}
}
53 changes: 28 additions & 25 deletions tests/Events/ChangeObjectStatusInBatchTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ public function test()
$event2 = $this->seatsioClient->events->create($chartKey2);

$response = $this->seatsioClient->events->changeObjectStatusInBatch([
new StatusChangeRequest($event1->key, "A-1", "lolzor"),
new StatusChangeRequest($event2->key, "A-2", "lolzor")
(new StatusChangeRequest())->setEvent($event1->key)->setObjectOrObjects("A-1")->setStatus("lolzor"),
(new StatusChangeRequest())->setEvent($event2->key)->setObjectOrObjects("A-2")->setStatus("lolzor")
]);

self::assertEquals('lolzor', $response[0]->objects['A-1']->status);
Expand All @@ -37,7 +37,7 @@ public function testChannelKeys()
]));

$response = $this->seatsioClient->events->changeObjectStatusInBatch([
new StatusChangeRequest($event->key, "A-1", "lolzor", null, null, null, null, ["channelKey1"])
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects("A-1")->setStatus("lolzor")->setChannelKeys(["channelKey1"])
]);

self::assertEquals('lolzor', $response[0]->objects['A-1']->status);
Expand All @@ -51,7 +51,7 @@ public function testIgnoreChannels()
]));

$response = $this->seatsioClient->events->changeObjectStatusInBatch([
new StatusChangeRequest($event->key, "A-1", "lolzor", null, null, null, true)
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects("A-1")->setStatus("lolzor")->setIgnoreChannels(true)
]);

self::assertEquals('lolzor', $response[0]->objects['A-1']->status);
Expand All @@ -64,16 +64,11 @@ public function testAllowedPreviousStatuses()

try {
$this->seatsioClient->events->changeObjectStatusInBatch([
new StatusChangeRequest($event->key,
"A-1",
"lolzor",
null,
null,
null,
true,
null,
['someOtherStatus']
)
(new StatusChangeRequest())
->setEvent($event->key)
->setStatus("lolzor")
->setObjectOrObjects("A-1")
->setAllowedPreviousStatuses(['someOtherStatus'])
]);
throw new \Exception("Should have failed");
} catch (SeatsioException $exception) {
Expand All @@ -89,17 +84,11 @@ public function testRejectedPreviousStatuses()

try {
$this->seatsioClient->events->changeObjectStatusInBatch([
new StatusChangeRequest($event->key,
"A-1",
"lolzor",
null,
null,
null,
true,
null,
null,
['free']
)
(new StatusChangeRequest())
->setEvent($event->key)
->setStatus("lolzor")
->setObjectOrObjects("A-1")
->setRejectedPreviousStatuses(['free'])
]);
throw new \Exception("Should have failed");
} catch (SeatsioException $exception) {
Expand All @@ -108,4 +97,18 @@ public function testRejectedPreviousStatuses()
}
}

public function testRelease()
{
$chartKey = $this->createTestChart();
$event = $this->seatsioClient->events->create($chartKey);
$this->seatsioClient->events->book($event->key, "A-1");

$response = $this->seatsioClient->events->changeObjectStatusInBatch([
(new StatusChangeRequest())->setType(StatusChangeRequest::$TYPE_RELEASE)->setEvent($event->key)->setObjectOrObjects("A-1"),
]);

self::assertEquals(EventObjectInfo::$FREE, $response[0]->objects['A-1']->status);
$objectInfo1 = $this->seatsioClient->events->retrieveObjectInfo($event->key, "A-1");
self::assertEquals(EventObjectInfo::$FREE, $objectInfo1->status);
}
}
8 changes: 4 additions & 4 deletions tests/Events/ListStatusChangesForObjectTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ public function test()
$chartKey = $this->createTestChart();
$event = $this->seatsioClient->events->create($chartKey);
$this->seatsioClient->events->changeObjectStatusInBatch([
new StatusChangeRequest($event->key, 'A-1', 's1'),
new StatusChangeRequest($event->key, 'A-1', 's2'),
new StatusChangeRequest($event->key, 'A-2', 's4'),
new StatusChangeRequest($event->key, 'A-1', 's3')
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-1')->setStatus('s1'),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-1')->setStatus('s2'),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-2')->setStatus('s4'),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-1')->setStatus('s3'),
]);
$this->waitForStatusChanges($event, 4);

Expand Down
46 changes: 23 additions & 23 deletions tests/Events/ListStatusChangesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ public function test()
$chartKey = $this->createTestChart();
$event = $this->seatsioClient->events->create($chartKey);
$this->seatsioClient->events->changeObjectStatusInBatch([
new StatusChangeRequest($event->key, 'A-1', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'A-2', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'A-3', EventObjectInfo::$BOOKED)
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-1')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-2')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-3')->setStatus(EventObjectInfo::$BOOKED)
]);
$this->waitForStatusChanges($event, 3);

Expand Down Expand Up @@ -106,10 +106,10 @@ public function testFilter()
$chartKey = $this->createTestChart();
$event = $this->seatsioClient->events->create($chartKey);
$this->seatsioClient->events->changeObjectStatusInBatch([
new StatusChangeRequest($event->key, 'A-1', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'A-2', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'B-1', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'A-3', EventObjectInfo::$BOOKED)
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-1')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-2')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('B-1')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-3')->setStatus(EventObjectInfo::$BOOKED)
]);
$this->waitForStatusChanges($event, 4);

Expand All @@ -126,10 +126,10 @@ public function testSortAsc()
$chartKey = $this->createTestChart();
$event = $this->seatsioClient->events->create($chartKey);
$this->seatsioClient->events->changeObjectStatusInBatch([
new StatusChangeRequest($event->key, 'A-1', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'A-2', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'B-1', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'A-3', EventObjectInfo::$BOOKED)
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-1')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-2')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('B-1')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-3')->setStatus(EventObjectInfo::$BOOKED)
]);
$this->waitForStatusChanges($event, 4);

Expand All @@ -146,10 +146,10 @@ public function testSortAscPageBefore()
$chartKey = $this->createTestChart();
$event = $this->seatsioClient->events->create($chartKey);
$this->seatsioClient->events->changeObjectStatusInBatch([
new StatusChangeRequest($event->key, 'A-1', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'A-2', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'B-1', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'A-3', EventObjectInfo::$BOOKED)
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-1')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-2')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('B-1')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-3')->setStatus(EventObjectInfo::$BOOKED),
]);
$this->waitForStatusChanges($event, 4);

Expand All @@ -169,10 +169,10 @@ public function testSortAscPageAfter()
$chartKey = $this->createTestChart();
$event = $this->seatsioClient->events->create($chartKey);
$this->seatsioClient->events->changeObjectStatusInBatch([
new StatusChangeRequest($event->key, 'A-1', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'A-2', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'B-1', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'A-3', EventObjectInfo::$BOOKED)
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-1')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-2')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('B-1')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-3')->setStatus(EventObjectInfo::$BOOKED),
]);
$this->waitForStatusChanges($event, 4);

Expand All @@ -192,10 +192,10 @@ public function testSortDesc()
$chartKey = $this->createTestChart();
$event = $this->seatsioClient->events->create($chartKey);
$this->seatsioClient->events->changeObjectStatusInBatch([
new StatusChangeRequest($event->key, 'A-1', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'A-2', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'B-1', EventObjectInfo::$BOOKED),
new StatusChangeRequest($event->key, 'A-3', EventObjectInfo::$BOOKED)
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-1')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-2')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('B-1')->setStatus(EventObjectInfo::$BOOKED),
(new StatusChangeRequest())->setEvent($event->key)->setObjectOrObjects('A-3')->setStatus(EventObjectInfo::$BOOKED),
]);
$this->waitForStatusChanges($event, 4);

Expand Down

0 comments on commit 31dbe58

Please sign in to comment.