| @@ 26-63 (lines=38) @@ | ||
| 23 | /** |
|
| 24 | * @mixin Avg |
|
| 25 | */ |
|
| 26 | final class AvgSpec extends ObjectBehavior |
|
| 27 | { |
|
| 28 | private $field = 'foo'; |
|
| 29 | ||
| 30 | public function let(): void |
|
| 31 | { |
|
| 32 | $this->beConstructedWith($this->field); |
|
| 33 | } |
|
| 34 | ||
| 35 | public function it_is_a_count_distinct(): void |
|
| 36 | { |
|
| 37 | $this->shouldBeAnInstanceOf(Avg::class); |
|
| 38 | } |
|
| 39 | ||
| 40 | public function it_is_a_operand(): void |
|
| 41 | { |
|
| 42 | $this->shouldBeAnInstanceOf(Operand::class); |
|
| 43 | } |
|
| 44 | ||
| 45 | public function it_is_transformable(QueryBuilder $qb): void |
|
| 46 | { |
|
| 47 | $this->transform($qb, 'a')->shouldReturn('AVG(a.foo)'); |
|
| 48 | } |
|
| 49 | ||
| 50 | public function it_is_transformable_distinct(QueryBuilder $qb): void |
|
| 51 | { |
|
| 52 | $this->beConstructedWith($this->field, true); |
|
| 53 | ||
| 54 | $this->transform($qb, 'a')->shouldReturn('AVG(DISTINCT a.foo)'); |
|
| 55 | } |
|
| 56 | ||
| 57 | public function it_is_executable(): void |
|
| 58 | { |
|
| 59 | $candidate = null; // not used |
|
| 60 | ||
| 61 | $this->shouldThrow(OperandNotExecuteException::class)->duringExecute($candidate); |
|
| 62 | } |
|
| 63 | } |
|
| 64 | ||
| @@ 26-63 (lines=38) @@ | ||
| 23 | /** |
|
| 24 | * @mixin Count |
|
| 25 | */ |
|
| 26 | final class CountSpec extends ObjectBehavior |
|
| 27 | { |
|
| 28 | private $field = 'foo'; |
|
| 29 | ||
| 30 | public function let(): void |
|
| 31 | { |
|
| 32 | $this->beConstructedWith($this->field); |
|
| 33 | } |
|
| 34 | ||
| 35 | public function it_is_a_count_distinct(): void |
|
| 36 | { |
|
| 37 | $this->shouldBeAnInstanceOf(Count::class); |
|
| 38 | } |
|
| 39 | ||
| 40 | public function it_is_a_operand(): void |
|
| 41 | { |
|
| 42 | $this->shouldBeAnInstanceOf(Operand::class); |
|
| 43 | } |
|
| 44 | ||
| 45 | public function it_is_transformable(QueryBuilder $qb): void |
|
| 46 | { |
|
| 47 | $this->transform($qb, 'a')->shouldReturn('COUNT(a.foo)'); |
|
| 48 | } |
|
| 49 | ||
| 50 | public function it_is_transformable_distinct(QueryBuilder $qb): void |
|
| 51 | { |
|
| 52 | $this->beConstructedWith($this->field, true); |
|
| 53 | ||
| 54 | $this->transform($qb, 'a')->shouldReturn('COUNT(DISTINCT a.foo)'); |
|
| 55 | } |
|
| 56 | ||
| 57 | public function it_is_executable(): void |
|
| 58 | { |
|
| 59 | $candidate = null; // not used |
|
| 60 | ||
| 61 | $this->shouldThrow(OperandNotExecuteException::class)->duringExecute($candidate); |
|
| 62 | } |
|
| 63 | } |
|
| 64 | ||
| @@ 26-63 (lines=38) @@ | ||
| 23 | /** |
|
| 24 | * @mixin Max |
|
| 25 | */ |
|
| 26 | final class MaxSpec extends ObjectBehavior |
|
| 27 | { |
|
| 28 | private $field = 'foo'; |
|
| 29 | ||
| 30 | public function let(): void |
|
| 31 | { |
|
| 32 | $this->beConstructedWith($this->field); |
|
| 33 | } |
|
| 34 | ||
| 35 | public function it_is_a_count_distinct(): void |
|
| 36 | { |
|
| 37 | $this->shouldBeAnInstanceOf(Max::class); |
|
| 38 | } |
|
| 39 | ||
| 40 | public function it_is_a_operand(): void |
|
| 41 | { |
|
| 42 | $this->shouldBeAnInstanceOf(Operand::class); |
|
| 43 | } |
|
| 44 | ||
| 45 | public function it_is_transformable(QueryBuilder $qb): void |
|
| 46 | { |
|
| 47 | $this->transform($qb, 'a')->shouldReturn('MAX(a.foo)'); |
|
| 48 | } |
|
| 49 | ||
| 50 | public function it_is_transformable_distinct(QueryBuilder $qb): void |
|
| 51 | { |
|
| 52 | $this->beConstructedWith($this->field, true); |
|
| 53 | ||
| 54 | $this->transform($qb, 'a')->shouldReturn('MAX(DISTINCT a.foo)'); |
|
| 55 | } |
|
| 56 | ||
| 57 | public function it_is_executable(): void |
|
| 58 | { |
|
| 59 | $candidate = null; // not used |
|
| 60 | ||
| 61 | $this->shouldThrow(OperandNotExecuteException::class)->duringExecute($candidate); |
|
| 62 | } |
|
| 63 | } |
|
| 64 | ||
| @@ 26-63 (lines=38) @@ | ||
| 23 | /** |
|
| 24 | * @mixin Min |
|
| 25 | */ |
|
| 26 | final class MinSpec extends ObjectBehavior |
|
| 27 | { |
|
| 28 | private $field = 'foo'; |
|
| 29 | ||
| 30 | public function let(): void |
|
| 31 | { |
|
| 32 | $this->beConstructedWith($this->field); |
|
| 33 | } |
|
| 34 | ||
| 35 | public function it_is_a_count_distinct(): void |
|
| 36 | { |
|
| 37 | $this->shouldBeAnInstanceOf(Min::class); |
|
| 38 | } |
|
| 39 | ||
| 40 | public function it_is_a_operand(): void |
|
| 41 | { |
|
| 42 | $this->shouldBeAnInstanceOf(Operand::class); |
|
| 43 | } |
|
| 44 | ||
| 45 | public function it_is_transformable(QueryBuilder $qb): void |
|
| 46 | { |
|
| 47 | $this->transform($qb, 'a')->shouldReturn('MIN(a.foo)'); |
|
| 48 | } |
|
| 49 | ||
| 50 | public function it_is_transformable_distinct(QueryBuilder $qb): void |
|
| 51 | { |
|
| 52 | $this->beConstructedWith($this->field, true); |
|
| 53 | ||
| 54 | $this->transform($qb, 'a')->shouldReturn('MIN(DISTINCT a.foo)'); |
|
| 55 | } |
|
| 56 | ||
| 57 | public function it_is_executable(): void |
|
| 58 | { |
|
| 59 | $candidate = null; // not used |
|
| 60 | ||
| 61 | $this->shouldThrow(OperandNotExecuteException::class)->duringExecute($candidate); |
|
| 62 | } |
|
| 63 | } |
|
| 64 | ||
| @@ 26-63 (lines=38) @@ | ||
| 23 | /** |
|
| 24 | * @mixin Sum |
|
| 25 | */ |
|
| 26 | final class SumSpec extends ObjectBehavior |
|
| 27 | { |
|
| 28 | private $field = 'foo'; |
|
| 29 | ||
| 30 | public function let(): void |
|
| 31 | { |
|
| 32 | $this->beConstructedWith($this->field); |
|
| 33 | } |
|
| 34 | ||
| 35 | public function it_is_a_count_distinct(): void |
|
| 36 | { |
|
| 37 | $this->shouldBeAnInstanceOf(Sum::class); |
|
| 38 | } |
|
| 39 | ||
| 40 | public function it_is_a_operand(): void |
|
| 41 | { |
|
| 42 | $this->shouldBeAnInstanceOf(Operand::class); |
|
| 43 | } |
|
| 44 | ||
| 45 | public function it_is_transformable(QueryBuilder $qb): void |
|
| 46 | { |
|
| 47 | $this->transform($qb, 'a')->shouldReturn('SUM(a.foo)'); |
|
| 48 | } |
|
| 49 | ||
| 50 | public function it_is_transformable_distinct(QueryBuilder $qb): void |
|
| 51 | { |
|
| 52 | $this->beConstructedWith($this->field, true); |
|
| 53 | ||
| 54 | $this->transform($qb, 'a')->shouldReturn('SUM(DISTINCT a.foo)'); |
|
| 55 | } |
|
| 56 | ||
| 57 | public function it_is_executable(): void |
|
| 58 | { |
|
| 59 | $candidate = null; // not used |
|
| 60 | ||
| 61 | $this->shouldThrow(OperandNotExecuteException::class)->duringExecute($candidate); |
|
| 62 | } |
|
| 63 | } |
|
| 64 | ||