public function testWhenAccessoryNotFound() { $accessoryId = 1233; $this->accessoryRepository->expects($this->once())->method('LoadById')->with($this->equalTo($accessoryId))->will($this->returnValue(null)); $this->service->GetAccessory($accessoryId); $this->assertEquals(RestResponse::NotFound(), $this->server->_LastResponse); $this->assertEquals(RestResponse::NOT_FOUND_CODE, $this->server->_LastResponseCode); }
/** * @name GetAccessory * @description Loads a specific accessory by id * @param int $accessoryId * @response AccessoryResponse * @return void */ public function GetAccessory($accessoryId) { $accessory = $this->accessoryRepository->LoadById($accessoryId); if (empty($accessory)) { $this->server->WriteResponse(RestResponse::NotFound(), RestResponse::NOT_FOUND_CODE); } else { $this->server->WriteResponse(new AccessoryResponse($this->server, $accessory)); } }
public function testWhenDeleting() { $id = 1982; $this->page->expects($this->once())->method('GetAccessoryId')->will($this->returnValue($id)); $this->accessoryRepository->expects($this->once())->method('Delete')->with($this->equalTo($id)); $this->presenter->DeleteAccessory(); }
/** * @param ReservationSeries $reservationSeries * @return ReservationRuleResult */ public function Validate($reservationSeries) { $conflicts = array(); $reservationAccessories = $reservationSeries->Accessories(); if (count($reservationAccessories) == 0) { // no accessories to be reserved, no need to proceed return new ReservationRuleResult(); } /** @var AccessoryToCheck[] $accessories */ $accessories = array(); foreach ($reservationAccessories as $accessory) { $a = $this->accessoryRepository->LoadById($accessory->AccessoryId); if (!$a->HasUnlimitedQuantity()) { $accessories[$a->GetId()] = new AccessoryToCheck($a, $accessory); } } if (count($accessories) == 0) { // no accessories with limited quantity to be reserved, no need to proceed return new ReservationRuleResult(); } $reservations = $reservationSeries->Instances(); /** @var Reservation $reservation */ foreach ($reservations as $reservation) { Log::Debug("Checking for accessory conflicts, reference number %s", $reservation->ReferenceNumber()); $accessoryReservations = $this->reservationRepository->GetAccessoriesWithin($reservation->Duration()); $aggregation = new AccessoryAggregation($accessories, $reservation->Duration()); foreach ($accessoryReservations as $accessoryReservation) { if ($reservation->ReferenceNumber() != $accessoryReservation->GetReferenceNumber()) { $aggregation->Add($accessoryReservation); } } foreach ($accessories as $accessory) { $alreadyReserved = $aggregation->GetQuantity($accessory->GetId()); $requested = $accessory->QuantityReserved(); if ($requested + $alreadyReserved > $accessory->QuantityAvailable()) { Log::Debug("Accessory over limit. Reference Number %s, Date %s, Quantity already reserved %s, Quantity requested: %s", $reservation->ReferenceNumber(), $reservation->Duration(), $alreadyReserved, $requested); array_push($conflicts, array('name' => $accessory->GetName(), 'date' => $reservation->StartDate())); } } } $thereAreConflicts = count($conflicts) > 0; if ($thereAreConflicts) { return new ReservationRuleResult(false, $this->GetErrorString($conflicts)); } return new ReservationRuleResult(); }
public function testUnlimitedQuantity() { $accessory1 = new ReservationAccessory(1, 5); $quantityAvailable = null; $startDate = Date::Parse('2010-04-04', 'UTC'); $endDate = Date::Parse('2010-04-05', 'UTC'); $reservation = new TestReservationSeries(); $reservation->WithAccessory($accessory1); $dr1 = new DateRange($startDate, $endDate); $reservation->WithDuration($dr1); $this->accessoryRepository->expects($this->at(0))->method('LoadById')->with($accessory1->AccessoryId)->will($this->returnValue(new Accessory($accessory1->AccessoryId, 'name1', $quantityAvailable))); $result = $this->rule->Validate($reservation); $this->assertTrue($result->IsValid()); }
public function DeleteAccessory() { $id = $this->page->GetAccessoryId(); Log::Debug('Deleting accessory with id %s', $id); $this->accessoryRepository->Delete($id); }