<?php

namespace SilverStripe\Dev\Tests;

use SilverStripe\Dev\Constraint\SSListContainsOnly;
use SilverStripe\Dev\Constraint\SSListContainsOnlyMatchingItems;
use SilverStripe\Dev\SapphireTest;
use SilverStripe\ORM\ArrayList;
use SilverStripe\Security\Member;

class SSListContainsOnlyMatchingItemsTest extends SapphireTest
{
    public function testEvaluateListMatchesCorrectly()
    {
        $constraint = new SSListContainsOnlyMatchingItems(['IsActive' => 1]);

        $this->assertTrue($constraint->evaluate($this->getListToMatch(), '', true));
    }

    /**
     * @return ArrayList|Member[]
     */
    private function getListToMatch()
    {
        $list = ArrayList::create();
        $list->push(Member::create(['FirstName' => 'Ingo', 'Surname' => 'Schommer', 'IsActive' => 1]));
        $list->push(Member::create(['FirstName' => 'Sam', 'Surname' => 'Minnee', 'IsActive' => 1]));

        return $list;
    }


    public function testEvaluateListDoesNotMatchWrongMatches()
    {
        $constraint = new SSListContainsOnlyMatchingItems(['IsActive' => 1]);

        $failingList = $this->getListToMatch();
        $failingList->push(Member::create(['FirstName' => 'Foo', 'IsActive' => 0]));

        $this->assertFalse($constraint->evaluate($failingList, '', true));
    }
}