<?php

namespace SilverStripe\ORM\Tests;

use SilverStripe\Dev\SapphireTest;
use SilverStripe\ORM\DataQuery;
use SilverStripe\ORM\DataQuery_SubGroup;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\Tests\DataObjectTest\Team;
use LogicException;
use InvalidArgumentException;

class DataQuery_SubGroupTest extends SapphireTest
{
    public function testConstructorException()
    {
        $this->expectException(InvalidArgumentException::class);
        $this->expectExceptionMessage('$clause must be either WHERE or HAVING');
        new DataQuery_SubGroup(new DataQuery(Team::class), 'AND', 'INVALID');
    }

    public function testWhereException()
    {
        $this->expectException(LogicException::class);
        $this->expectExceptionMessage('Cannot call where() when clause is set to HAVING');
        $query = new DataQuery_SubGroup(new DataQuery(Team::class), 'AND', 'HAVING');
        $query->where([]);
    }

    public function testWhereAnyException()
    {
        $this->expectException(LogicException::class);
        $this->expectExceptionMessage('Cannot call whereAny() when clause is set to HAVING');
        $query = new DataQuery_SubGroup(new DataQuery(Team::class), 'AND', 'HAVING');
        $query->whereAny([]);
    }

    public function testHavingException()
    {
        $this->expectException(LogicException::class);
        $this->expectExceptionMessage('Cannot call having() when clause is set to WHERE');
        $query = new DataQuery_SubGroup(new DataQuery(Team::class), 'AND', 'WHERE');
        $query->having([]);
    }
}