App\Specifications\OldDeploymentSpecification::satisfyingElementsFrom PHP Method

satisfyingElementsFrom() public method

Get elements that satisfy the specification.
public satisfyingElementsFrom ( Model $project ) : Collection
$project Illuminate\Database\Eloquent\Model
return Illuminate\Support\Collection
    public function satisfyingElementsFrom(Model $project)
    {
        if ($project->getDeployments()->isEmpty()) {
            return collect([]);
        }
        $oldDeployments = collect([]);
        $pastDaysToKeepDeployments = collect([]);
        $pastNumToKeepDeployments = collect([]);
        if (!is_null($project->days_to_keep_deployments)) {
            $currentDate = clone $this->currentDate;
            $date = $currentDate->modify('-' . $project->days_to_keep_deployments . ' days');
            $pastDaysToKeepDeployments = $project->getDeploymentsWhereCreatedAtBefore($date);
            if ($project->keep_last_deployment && $pastDaysToKeepDeployments->contains($project->getLastDeployment())) {
                $pastDaysToKeepDeployments->shift();
            }
        }
        if (!is_null($project->max_number_of_deployments_to_keep)) {
            $number = $project->getLastDeployment()->number - $project->max_number_of_deployments_to_keep + 1;
            $pastNumToKeepDeployments = $project->getDeploymentsWhereNumberBefore($number);
        }
        return $oldDeployments->merge($pastDaysToKeepDeployments)->merge($pastNumToKeepDeployments)->sortByDesc('number')->unique('number')->values();
    }

Usage Example

 public function test_Should_GetSatisfyingElements_When_DeploymentsDoNotExists()
 {
     $date = new DateTime();
     $spec = new OldDeploymentSpecification($date);
     $deployments = collect([]);
     $this->mockProjectModel->shouldReceive('getDeployments')->once()->andReturn($deployments);
     $oldDeployments = $spec->satisfyingElementsFrom($this->mockProjectModel);
     $this->assertEmpty($oldDeployments);
 }
OldDeploymentSpecification