. */ declare(strict_types=1); namespace Tests\Unit\Middleware; use FireflyIII\Http\Middleware\Sandstorm; use FireflyIII\Repositories\User\UserRepositoryInterface; use Log; use Mockery; use Route; use Symfony\Component\HttpFoundation\Response; use Tests\TestCase; /** * Class RangeTest * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) * @SuppressWarnings(PHPMD.TooManyPublicMethods) */ class SandstormTest extends TestCase { /** * Set up test */ public function setUp(): void { parent::setUp(); Log::info(sprintf('Now in %s.', get_class($this))); Route::middleware(Sandstorm::class)->any( '/_test/sandstorm', function () { return view('test.test'); } ); } /** * @covers \FireflyIII\Http\Middleware\Sandstorm */ public function testMiddlewareBasic(): void { putenv('SANDSTORM=1'); $repository = $this->mock(UserRepositoryInterface::class); $repository->shouldReceive('findByEmail')->withArgs(['anonymous@firefly'])->once()->andReturn($this->user()); // single user, checks if user is admin $repository->shouldReceive('count')->andReturn(1); $repository->shouldReceive('hasRole')->withArgs([Mockery::any(), 'demo'])->andReturn(false)->once(); $repository->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->andReturn(true)->once(); $repository->shouldReceive('attachRole')->withArgs([Mockery::any(), 'owner'])->once(); $response = $this->get('/_test/sandstorm'); $this->assertEquals(Response::HTTP_OK, $response->getStatusCode()); $response->assertSee('sandstorm-anon: false'); putenv('SANDSTORM=0'); } /** * @covers \FireflyIII\Http\Middleware\Sandstorm */ public function testMiddlewareNotSandstorm(): void { putenv('SANDSTORM=0'); $response = $this->get('/_test/sandstorm'); $this->assertEquals(Response::HTTP_OK, $response->getStatusCode()); $response->assertSee('sandstorm-anon: false'); } }