/** * Test validateSchema() * * @return void */ public function testValidateSchema() { // Set the json array schema $schemaArray = ['dogs' => ['name' => 'string:unique', 'paws' => 'yesTheyHaveThemSometimes:index', 'canines' => 'boolean', 'hair' => 'string(50):index', 'ears_invalid' => 'string:thisIsMyInvalidModifier', 'ears_valid' => "string:after('id')"], 'create_cats_table' => ['hair' => 'boolean'], 'posts_tags_pivot' => null]; // Validate schema $errors = $this->makeMigrationJson->validateSchema($schemaArray); // The 'paws' section should come back with invalid column type error $this->assertTrue(isset($errors['dogs']['paws']['columnType']), 'columnType: "paws" was supposed to come back with a column type error, instead we got: ' . json_encode($errors)); // The 'ears_invalid' section should come back with invalid column type error $this->assertTrue(isset($errors['dogs']['ears_invalid']['columnModifier']), 'columnModifier: "ears_invalid" was supposed to come back with a column modifier error, instead we got: ' . json_encode($errors)); // The 'hair' section should not come back with errors because of its optional column type parameters $this->assertFalse(isset($errors['dogs']['hair']), 'columnType: "hair:string(50):index" should be allowed to be validated as a "string", not as "string(50)": '); // The 'ears_valid' section should not come back with errors because it is a valid column modifier or index $this->assertFalse(isset($errors['dogs']['ears_valid']), 'columnType: "ears_valid" should not come back with errors because it is a valid column modifier or index'); }
/** * Validate the json file and console report any issues * * @return void */ protected function validate() { // Get json array from file $jsonArray = $this->makeMigrationJson->jsonFileToArray($this->filePath); // Check for invalid json if ($jsonArray === null) { // Display error message $this->error('Invalid JSON detected: Check that your json file does not contain invalid syntax: ' . $this->filePath); // End further execution return; } // Check for data existence if (empty($jsonArray)) { // Display error message $this->error('No data found in json file: It seems you have no data in: ' . $this->filePath); // End further execution return; } // Validate $errors = $this->makeMigrationJson->validateSchema($jsonArray); // If no errors where found if (empty($errors)) { // Display confirmation message $this->info('No validation errors where found, congrats!'); // End further execution return; } // Report results foreach ($errors as $tableName => $fields) { // For every field foreach ($fields as $fieldName => $fieldProperties) { // For every field property foreach ($fieldProperties as $property) { // Show error $this->error($property); // Show json reference $this->error("In section: " . json_encode([$tableName => [$fieldName => $jsonArray[$tableName][$fieldName]]], JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)); } } } }