Пример #1
0
 /**
  * Tests that when an existing object is attached as a value of another existing object, the
  * whole sub-object is re-written to the new value.
  *
  * @return void
  */
 public function testAppendExistingObjects()
 {
     $doc = new Document(array('exists' => true, 'data' => array('deeply' => new Document(array('pathKey' => 'deeply', 'exists' => true, 'data' => array('nested' => 'object'))), 'foo' => 'bar')));
     $append = new Document(array('exists' => true, 'data' => array('foo' => 'bar')));
     $doc->deeply = $append;
     $result = Exporter::get('update', $doc->export());
     $expected = array('update' => array('deeply' => array('foo' => 'bar')));
     $this->assertEqual($expected, $result);
     $doc->update();
     $expected = array('$set' => array('deeply' => array('foo' => 'bar')));
     $this->assertEqual($expected, Exporter::toCommand($result));
     $doc->append2 = new Document(array('exists' => false, 'data' => array('foo' => 'bar')));
     $expected = array('update' => array('append2' => array('foo' => 'bar')));
     $this->assertEqual($expected, Exporter::get('update', $doc->export()));
     $doc->update();
     $this->assertFalse(Exporter::get('update', $doc->export()));
     $doc->append2->foo = 'baz';
     $doc->append2->bar = 'dib';
     $doc->deeply->nested = true;
     $expected = array('update' => array('append2.foo' => 'baz', 'append2.bar' => 'dib', 'deeply.nested' => true));
     $this->assertEqual($expected, Exporter::get('update', $doc->export()));
 }
Пример #2
0
 /**
  * Tests that a modified `Document` exports the proper fields in a newly-appended nested
  * `Document`.
  *
  * @return void
  */
 public function testModifiedExport()
 {
     $database = new MockDocumentSource();
     $model = $this->_model;
     $data = array('foo' => 'bar', 'baz' => 'dib');
     $doc = new Document(compact('model', 'data'));
     $doc->nested = array('more' => 'data');
     $newData = $doc->export($database);
     $expected = array('foo' => 'bar', 'baz' => 'dib', 'nested' => array('more' => 'data'));
     $this->assertEqual($expected, $newData);
     $doc = new Document(array('model' => $model, 'exists' => true, 'data' => array('foo' => 'bar', 'baz' => 'dib')));
     $this->assertFalse($doc->export($database));
     $doc->nested = array('more' => 'data');
     $this->assertEqual('data', $doc->nested->more);
     $modified = $doc->export($database);
     $this->assertEqual(array('nested' => array('more' => 'data')), $modified);
     $doc->update();
     $this->assertFalse($doc->export($database));
     $doc->more = 'cowbell';
     $doc->nested->evenMore = 'cowbell';
     $modified = $doc->export($database);
     $expected = array('nested' => array('evenMore' => 'cowbell'), 'more' => 'cowbell');
     $this->assertEqual($expected, $modified);
     $doc->update();
     $doc->nested->evenMore = 'foo!';
     $this->assertEqual(array('nested' => array('evenMore' => 'foo!')), $doc->export($database));
 }
Пример #3
0
 /**
  * Tests that a modified `Document` exports the proper fields in a newly-appended nested
  * `Document`.
  *
  * @return void
  */
 public function testModifiedExport()
 {
     $model = $this->_model;
     $data = array('foo' => 'bar', 'baz' => 'dib');
     $doc = new Document(compact('model', 'data') + array('exists' => false));
     $doc->nested = array('more' => 'data');
     $newData = $doc->export();
     $expected = array('foo' => 'bar', 'baz' => 'dib', 'nested.more' => 'data');
     $this->assertFalse($newData['exists']);
     $this->assertEqual(array('foo' => 'bar', 'baz' => 'dib'), $newData['data']);
     $this->assertEqual(1, count($newData['update']));
     $this->assertTrue($newData['update']['nested'] instanceof Document);
     $result = $newData['update']['nested']->export();
     $this->assertFalse($result['exists']);
     $this->assertEqual(array('more' => 'data'), $result['data']);
     $this->assertFalse($result['update']);
     $this->assertEqual('nested', $result['key']);
     $doc = new Document(compact('model') + array('exists' => true, 'data' => array('foo' => 'bar', 'baz' => 'dib')));
     $result = $doc->export();
     $this->assertFalse($result['update']);
     $doc->nested = array('more' => 'data');
     $this->assertEqual('data', $doc->nested->more);
     $modified = $doc->export();
     $this->assertTrue($modified['exists']);
     $this->assertEqual(array('foo' => 'bar', 'baz' => 'dib'), $modified['data']);
     $this->assertEqual(array('nested'), array_keys($modified['update']));
     $this->assertNull($modified['key']);
     $nested = $modified['update']['nested']->export();
     $this->assertFalse($nested['exists']);
     $this->assertEqual(array('more' => 'data'), $nested['data']);
     $this->assertEqual('nested', $nested['key']);
     $doc->update();
     $result = $doc->export();
     $this->assertFalse($result['update']);
     $doc->more = 'cowbell';
     $doc->nested->evenMore = 'cowbell';
     $modified = $doc->export();
     $expected = array('more' => 'cowbell');
     $this->assertEqual($expected, $modified['update']);
     $this->assertEqual(array('nested', 'foo', 'baz'), array_keys($modified['data']));
     $this->assertEqual('bar', $modified['data']['foo']);
     $this->assertEqual('dib', $modified['data']['baz']);
     $nested = $modified['data']['nested']->export();
     $this->assertTrue($nested['exists']);
     $this->assertEqual(array('more' => 'data'), $nested['data']);
     $this->assertEqual(array('evenMore' => 'cowbell'), $nested['update']);
     $this->assertEqual('nested', $nested['key']);
     $doc->update();
     $doc->nested->evenMore = 'foo!';
     $modified = $doc->export();
     $this->assertFalse($modified['update']);
     $nested = $modified['data']['nested']->export();
     $this->assertEqual(array('evenMore' => 'foo!'), $nested['update']);
 }