. */ declare(strict_types=1); namespace Tests\Unit\Middleware; use FireflyIII\Http\Middleware\Sandstorm; use FireflyIII\Repositories\User\UserRepositoryInterface; use Route; use Symfony\Component\HttpFoundation\Response; use Tests\TestCase; use Mockery; /** * Class RangeTest */ class SandstormTest extends TestCase { /** * @covers \FireflyIII\Http\Middleware\Sandstorm::handle */ 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'); } /** * Set up test */ protected function setUp(): void { parent::setUp(); Route::middleware(Sandstorm::class)->any( '/_test/sandstorm', function () { return view('test.test'); } ); } }