public function testIfWillPopulateDocumentInstance() { $data = ['_class' => DocumentBaseAttributes::class, '_id' => new MongoId(), 'string' => 'Some new string value', 'int' => 15100900, 'float' => 455.34]; $encoded = json_encode($data); $decoded = json_decode($encoded); $model = JsonArray::toModel($decoded); $this->assertInstanceOf(DocumentBaseAttributes::class, $model); unset($data['_class']); foreach ($data as $field => $value) { if ($field == '_id') { $this->assertSame((string) $value, (string) $model->_id); continue; } $this->assertSame($value, $model->{$field}); } }
/** * This is use case, where model is initialized from external JSON * And order of elements are changed in json. */ public function testIfWillProperlyStoreI18NFieldsWhenChangedOrderFromExternalSource() { $langs = ['en', 'pl']; $model = new WithEmbeddedArrayI18NModel(); // Attach single $one = new ModelWithI18N(); $one->setLanguages($langs); $one->layout = 'new'; $one->title = 'New York'; $one->setLang('pl'); $one->title = 'Nowy Jork'; $one->setLang('en'); $model->page = $one; // Attach first $m = new ModelWithI18N(); $m->setLanguages($langs); $m->layout = 'new'; $m->title = 'New York'; $m->setLang('pl'); $m->title = 'Nowy Jork'; $m->setLang('en'); $model->pages[] = $m; // Attach second $m = new ModelWithI18NSecond(); $m->setLanguages($langs); $m->layout = 'new'; $m->title = 'Prague'; $m->setLang('pl'); $m->title = 'Praga'; $m->setLang('en'); $model->pages[] = $m; // This are expected values $expectedData = RawArray::fromModel($model); $expectedData['pages'] = array_reverse($expectedData['pages']); // Now assume that external json data arrived $externalData = JsonArray::fromModel($model); $externalData['pages'] = array_reverse($externalData['pages']); $expectedModel = JsonArray::toModel($externalData, $model, $model); $comparator = new ModelComparator($this); $comparator->compare($expectedData, $expectedModel); $raw = RawArray::fromModel($expectedModel); }