<?php

namespace SilverStripe\Control\Tests\Middleware\ConfirmationMiddleware;

use SilverStripe\Control\Middleware\ConfirmationMiddleware\GetParameter;
use SilverStripe\Control\Tests\HttpRequestMockBuilder;
use SilverStripe\Dev\SapphireTest;
use SilverStripe\Security\Confirmation\Item;

class GetParameterTest extends SapphireTest
{
    use HttpRequestMockBuilder;

    public function testName()
    {
        $rule = new GetParameter('name_01');
        $this->assertEquals('name_01', $rule->getName());

        $rule->setName('name_02');
        $this->assertEquals('name_02', $rule->getName());
    }

    public function testBypass()
    {
        $request = $this->buildRequestMock('test/path', ['parameterKey' => 'parameterValue']);

        $rule = new GetParameter('parameterKey_01');
        $this->assertFalse($rule->checkRequestForBypass($request));

        $rule->setName('parameterKey');
        $this->assertTrue($rule->checkRequestForBypass($request));
    }

    public function testConfirmationItem()
    {
        $request = $this->buildRequestMock('test/path', ['parameterKey' => 'parameterValue']);

        $rule = new GetParameter('parameterKey_01');
        $this->assertNull($rule->getRequestConfirmationItem($request));

        $rule->setName('parameterKey');
        $item = $rule->getRequestConfirmationItem($request);
        $this->assertNotNull($item);
        $this->assertInstanceOf(Item::class, $item);
    }
}