actingAsForApi(User::factory()->create()); $this->importFileResponse(['import' => 44])->assertForbidden(); } #[Test] public function importLocation(): void { $importFileBuilder = ImportFileBuilder::new(); $row = $importFileBuilder->firstRow(); $import = Import::factory()->locations()->create(['file_path' => $importFileBuilder->saveToImportsDirectory()]); $this->actingAsForApi(User::factory()->superuser()->create()); $this->importFileResponse(['import' => $import->id, 'send-welcome' => 0]) ->assertOk() ->assertExactJson([ 'payload' => null, 'status' => 'success', 'messages' => ['redirect_url' => route('locations.index')] ]); $newLocation = Location::query() ->where('name', $row['name']) ->sole(); $this->assertEquals($row['name'], $newLocation->name); } #[Test] public function willIgnoreUnknownColumnsWhenFileContainsUnknownColumns(): void { $row = ImportFileBuilder::new()->definition(); $row['unknownColumnInCsvFile'] = 'foo'; $importFileBuilder = new ImportFileBuilder([$row]); $this->actingAsForApi(User::factory()->superuser()->create()); $import = Import::factory()->locations()->create(['file_path' => $importFileBuilder->saveToImportsDirectory()]); $this->importFileResponse(['import' => $import->id])->assertOk(); } #[Test] public function whenRequiredColumnsAreMissingInImportFile(): void { $importFileBuilder = ImportFileBuilder::new(['name' => '']); $import = Import::factory()->locations()->create(['file_path' => $importFileBuilder->saveToImportsDirectory()]); $this->actingAsForApi(User::factory()->superuser()->create()); $this->importFileResponse(['import' => $import->id]) ->assertInternalServerError() ->assertExactJson([ 'status' => 'import-errors', 'payload' => null, 'messages' => [ '' => [ 'Location ""' => [ 'name' => ['The name field is required.'], ], ] ] ]); $newLocation = Location::query() ->where('name', $importFileBuilder->firstRow()['name']) ->get(); $this->assertCount(0, $newLocation); } #[Test] public function updateLocationFromImport(): void { $location = Location::factory()->create()->refresh(); $importFileBuilder = ImportFileBuilder::new(['name' => $location->name, 'phone' => $location->phone]); $row = $importFileBuilder->firstRow(); $import = Import::factory()->locations()->create(['file_path' => $importFileBuilder->saveToImportsDirectory()]); $this->actingAsForApi(User::factory()->superuser()->create()); $this->importFileResponse(['import' => $import->id, 'import-update' => true])->assertOk(); $updatedLocation = Location::query()->find($location->id); $updatedAttributes = [ 'name', 'phone', ]; $this->assertEquals($row['name'], $updatedLocation->name); $this->assertEquals( Arr::except($location->attributesToArray(), array_merge($updatedAttributes, $location->getDates())), Arr::except($updatedLocation->attributesToArray(), array_merge($updatedAttributes, $location->getDates())), ); } }