Skip to content

Commit c457293

Browse files
Fixes bug that caused unavailability that starts at the exact second availability starts or ends to be unsubtracted from availability.
1 parent 24db8a1 commit c457293

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

.phpunit.result.cache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
C:37:"PHPUnit\Runner\DefaultTestResultCache":2303:{a:2:{s:7:"defects";a:12:{s:56:"Tests\CarbonAvailabilityTest::testBackToBackPeriodsMerge";i:3;s:60:"Tests\CarbonAvailabilityTest::testDisconnectedTimesAreMerged";i:3;s:62:"Tests\CarbonAvailabilityTest::testDisconnectedPeriodsDontMerge";i:3;s:67:"Tests\CarbonAvailabilityTest::testInclusiveAvailabilitiesAreRemoved";i:3;s:63:"Tests\CarbonAvailabilityTest::testTimesGetSplitByUnavailability";i:4;s:57:"Tests\CarbonAvailabilityTest::testAvailabilityStartsLater";i:4;s:57:"Tests\CarbonAvailabilityTest::testAvailabilityEndsEarlier";i:4;s:65:"Tests\CarbonAvailabilityTest::testAvailabilityIsRemovedIfEclipsed";i:4;s:74:"Tests\CarbonAvailabilityTest::testAvailabilityIsRemovedIfEclipsedPerfectly";i:3;s:56:"Tests\CarbonAvailabilityTest::testBasicSessionTimesSplit";i:3;s:47:"Tests\CarbonAvailabilityTest::testReadMeExample";i:3;s:49:"Tests\CarbonAvailabilityTest::testThisDumbProblem";i:3;}s:5:"times";a:19:{s:40:"Tests\CarbonAvailabilityTest::testIsTrue";d:0.022;s:56:"Tests\CarbonAvailabilityTest::testBackToBackPeriodsMerge";d:0.049;s:62:"Tests\CarbonAvailabilityTest::testDisconnectedPeriodsDontMerge";d:0;s:60:"Tests\CarbonAvailabilityTest::testDisconnectedTimesAreMerged";d:0;s:72:"Tests\CarbonAvailabilityTest::testDisconnectedTimesAreMergedWithOutliers";d:0.001;s:67:"Tests\CarbonAvailabilityTest::testInclusiveAvailabilitiesAreRemoved";d:0;s:74:"Tests\CarbonAvailabilityTest::testInverseInclusiveAvailabilitiesAreRemoved";d:0;s:63:"Tests\CarbonAvailabilityTest::testTimesGetSplitByUnavailability";d:0.001;s:57:"Tests\CarbonAvailabilityTest::testAvailabilityStartsLater";d:0;s:57:"Tests\CarbonAvailabilityTest::testAvailabilityEndsEarlier";d:0;s:65:"Tests\CarbonAvailabilityTest::testAvailabilityIsRemovedIfEclipsed";d:0;s:69:"Tests\CarbonAvailabilityTest::testTimesGetDoubleSplitByUnavailability";d:0.001;s:60:"Tests\CarbonAvailabilityTest::testAvailabilityStaysUntouched";d:0;s:57:"Tests\CarbonAvailabilityTest::testMultipleTimesGetTrimmed";d:0.001;s:74:"Tests\CarbonAvailabilityTest::testAvailabilityIsRemovedIfEclipsedPerfectly";d:0;s:51:"Tests\CarbonAvailabilityTest::testBasicSessionTimes";d:0.017;s:56:"Tests\CarbonAvailabilityTest::testBasicSessionTimesSplit";d:0.001;s:47:"Tests\CarbonAvailabilityTest::testReadMeExample";d:0.001;s:49:"Tests\CarbonAvailabilityTest::testThisDumbProblem";d:0;}}}
1+
C:37:"PHPUnit\Runner\DefaultTestResultCache":2062:{a:2:{s:7:"defects";a:7:{s:57:"Tests\CarbonAvailabilityTest::testAvailabilityStartsLater";i:4;s:57:"Tests\CarbonAvailabilityTest::testAvailabilityEndsEarlier";i:4;s:65:"Tests\CarbonAvailabilityTest::testAvailabilityIsRemovedIfEclipsed";i:4;s:74:"Tests\CarbonAvailabilityTest::testAvailabilityIsRemovedIfEclipsedPerfectly";i:4;s:57:"Tests\CarbonAvailabilityTest::testMultipleTimesGetTrimmed";i:4;s:69:"Tests\CarbonAvailabilityTest::testAvailabilityStartsWhenBookingStarts";i:4;s:67:"Tests\CarbonAvailabilityTest::testAvailabilityWndsWhenBookingStarts";i:4;}s:5:"times";a:19:{s:56:"Tests\CarbonAvailabilityTest::testBackToBackPeriodsMerge";d:0.065;s:62:"Tests\CarbonAvailabilityTest::testDisconnectedPeriodsDontMerge";d:0.001;s:60:"Tests\CarbonAvailabilityTest::testDisconnectedTimesAreMerged";d:0.001;s:72:"Tests\CarbonAvailabilityTest::testDisconnectedTimesAreMergedWithOutliers";d:0.001;s:67:"Tests\CarbonAvailabilityTest::testInclusiveAvailabilitiesAreRemoved";d:0.001;s:74:"Tests\CarbonAvailabilityTest::testInverseInclusiveAvailabilitiesAreRemoved";d:0.001;s:63:"Tests\CarbonAvailabilityTest::testTimesGetSplitByUnavailability";d:0.001;s:57:"Tests\CarbonAvailabilityTest::testAvailabilityStartsLater";d:0.001;s:57:"Tests\CarbonAvailabilityTest::testAvailabilityEndsEarlier";d:0.001;s:65:"Tests\CarbonAvailabilityTest::testAvailabilityIsRemovedIfEclipsed";d:0.001;s:74:"Tests\CarbonAvailabilityTest::testAvailabilityIsRemovedIfEclipsedPerfectly";d:0.001;s:60:"Tests\CarbonAvailabilityTest::testAvailabilityStaysUntouched";d:0.001;s:69:"Tests\CarbonAvailabilityTest::testTimesGetDoubleSplitByUnavailability";d:0.001;s:57:"Tests\CarbonAvailabilityTest::testMultipleTimesGetTrimmed";d:0.001;s:51:"Tests\CarbonAvailabilityTest::testBasicSessionTimes";d:0.027;s:56:"Tests\CarbonAvailabilityTest::testBasicSessionTimesSplit";d:0.001;s:47:"Tests\CarbonAvailabilityTest::testReadMeExample";d:0.002;s:69:"Tests\CarbonAvailabilityTest::testAvailabilityStartsWhenBookingStarts";d:0.001;s:67:"Tests\CarbonAvailabilityTest::testAvailabilityWndsWhenBookingStarts";d:0.001;}}}

src/CarbonAvailability.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,11 +156,11 @@ public static function subtractPeriod($avail, $unavail)
156156
CarbonPeriod::create($unavail->getEndDate(), $avail->getEndDate())
157157
];
158158
}
159-
if ($avail->startsAfter($unavail->getStartDate()) && $avail->endsAfter($unavail->getEndDate())) {
159+
if ($avail->startsAfterOrAt($unavail->getStartDate()) && $avail->endsAfter($unavail->getEndDate())) {
160160
// Trim the front end of the availability
161161
$avail->setStartDate($unavail->getEndDate());
162162
}
163-
if ($avail->endsAfter($unavail->getStartDate()) && $avail->endsBefore($unavail->getEndDate())) {
163+
if ($avail->endsAfter($unavail->getStartDate()) && $avail->endsBeforeOrAt($unavail->getEndDate())) {
164164
// Trim the back end of the availability
165165
$avail->setEndDate($unavail->getStartDate());
166166
}

tests/CarbonAvailabilityTest.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ public function testAvailabilityStartsWhenBookingStarts()
411411
{
412412
$availability = [['2019-12-10 18:00:00', '2019-12-10 19:00:00']];
413413

414-
$booked = [['2019-12-10 17:59:59', '2019-12-10 18:45:00']];
414+
$booked = [['2019-12-10 18:00:00', '2019-12-10 18:45:00']];
415415

416416
$availability = new CarbonAvailability($availability, $booked);
417417
$sessions = $availability->sessions('15 minutes');
@@ -421,4 +421,25 @@ public function testAvailabilityStartsWhenBookingStarts()
421421
$sessions[0]->toDateTimeString()
422422
], ['2019-12-10 18:45:00']);
423423
}
424+
425+
/**
426+
* [===============]
427+
* [xxxxxxxxxxx]
428+
* [===]
429+
* |
430+
*/
431+
public function testAvailabilityWndsWhenBookingStarts()
432+
{
433+
$availability = [['2019-12-10 18:00:00', '2019-12-10 19:00:00']];
434+
435+
$booked = [['2019-12-10 18:15:00', '2019-12-10 19:00:00']];
436+
437+
$availability = new CarbonAvailability($availability, $booked);
438+
$sessions = $availability->sessions('15 minutes');
439+
440+
$this->assertCount(1, $sessions);
441+
$this->assertEquals([
442+
$sessions[0]->toDateTimeString()
443+
], ['2019-12-10 18:00:00']);
444+
}
424445
}

0 commit comments

Comments
 (0)