repository = m::mock(EggRepositoryInterface::class); } /** * Test that a JSON structure is returned. */ public function testJsonStructureIsExported() { $egg = factory(Egg::class)->make([ 'id' => 123, 'nest_id' => 456, ]); $egg->variables = collect([$variable = factory(EggVariable::class)->make()]); $this->repository->shouldReceive('getWithExportAttributes')->with($egg->id)->once()->andReturn($egg); $service = new EggExporterService($this->repository); $response = $service->handle($egg->id); $this->assertNotEmpty($response); $data = json_decode($response); $this->assertEquals(JSON_ERROR_NONE, json_last_error()); $this->assertObjectHasNestedAttribute('meta.version', $data); $this->assertObjectNestedValueEquals('meta.version', 'PTDL_v1', $data); $this->assertObjectHasNestedAttribute('author', $data); $this->assertObjectNestedValueEquals('author', $egg->author, $data); $this->assertObjectHasNestedAttribute('exported_at', $data); $this->assertObjectNestedValueEquals('exported_at', Carbon::now()->toIso8601String(), $data); $this->assertObjectHasNestedAttribute('scripts.installation.script', $data); $this->assertObjectHasNestedAttribute('scripts.installation.container', $data); $this->assertObjectHasNestedAttribute('scripts.installation.entrypoint', $data); $this->assertObjectHasAttribute('variables', $data); $this->assertArrayHasKey('0', $data->variables); $this->assertObjectHasAttribute('name', $data->variables[0]); $this->assertObjectNestedValueEquals('name', $variable->name, $data->variables[0]); } }