You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							223 lines
						
					
					
						
							5.4 KiB
						
					
					
				
			
		
		
	
	
							223 lines
						
					
					
						
							5.4 KiB
						
					
					
				| <?php | |
|  | |
| namespace yiiunit\extensions\mongo; | |
|  | |
| /** | |
|  * @group mongo | |
|  */ | |
| class CollectionTest extends MongoTestCase | |
| { | |
| 	protected function tearDown() | |
| 	{ | |
| 		$this->dropCollection('customer'); | |
| 		parent::tearDown(); | |
| 	} | |
|  | |
| 	// Tests : | |
|  | |
| 	public function testGetName() | |
| 	{ | |
| 		$collectionName = 'customer'; | |
| 		$collection = $this->getConnection()->getCollection($collectionName); | |
| 		$this->assertEquals($collectionName, $collection->getName()); | |
| 		$this->assertEquals($this->mongoConfig['defaultDatabaseName'] . '.' . $collectionName, $collection->getFullName()); | |
| 	} | |
|  | |
| 	public function testFind() | |
| 	{ | |
| 		$collection = $this->getConnection()->getCollection('customer'); | |
| 		$cursor = $collection->find(); | |
| 		$this->assertTrue($cursor instanceof \MongoCursor); | |
| 	} | |
|  | |
| 	public function testInsert() | |
| 	{ | |
| 		$collection = $this->getConnection()->getCollection('customer'); | |
| 		$data = [ | |
| 			'name' => 'customer 1', | |
| 			'address' => 'customer 1 address', | |
| 		]; | |
| 		$id = $collection->insert($data); | |
| 		$this->assertTrue($id instanceof \MongoId); | |
| 		$this->assertNotEmpty($id->__toString()); | |
| 	} | |
|  | |
| 	/** | |
| 	 * @depends testInsert | |
| 	 */ | |
| 	public function testFindAll() | |
| 	{ | |
| 		$collection = $this->getConnection()->getCollection('customer'); | |
| 		$data = [ | |
| 			'name' => 'customer 1', | |
| 			'address' => 'customer 1 address', | |
| 		]; | |
| 		$id = $collection->insert($data); | |
|  | |
| 		$rows = $collection->findAll(); | |
| 		$this->assertEquals(1, count($rows)); | |
| 		$this->assertEquals($id, $rows[0]['_id']); | |
| 	} | |
|  | |
| 	/** | |
| 	 * @depends testFind | |
| 	 */ | |
| 	public function testBatchInsert() | |
| 	{ | |
| 		$collection = $this->getConnection()->getCollection('customer'); | |
| 		$rows = [ | |
| 			[ | |
| 				'name' => 'customer 1', | |
| 				'address' => 'customer 1 address', | |
| 			], | |
| 			[ | |
| 				'name' => 'customer 2', | |
| 				'address' => 'customer 2 address', | |
| 			], | |
| 		]; | |
| 		$insertedRows = $collection->batchInsert($rows); | |
| 		$this->assertTrue($insertedRows[0]['_id'] instanceof \MongoId); | |
| 		$this->assertTrue($insertedRows[1]['_id'] instanceof \MongoId); | |
| 		$this->assertEquals(count($rows), $collection->find()->count()); | |
| 	} | |
|  | |
| 	public function testSave() | |
| 	{ | |
| 		$collection = $this->getConnection()->getCollection('customer'); | |
| 		$data = [ | |
| 			'name' => 'customer 1', | |
| 			'address' => 'customer 1 address', | |
| 		]; | |
| 		$id = $collection->save($data); | |
| 		$this->assertTrue($id instanceof \MongoId); | |
| 		$this->assertNotEmpty($id->__toString()); | |
| 	} | |
|  | |
| 	/** | |
| 	 * @depends testSave | |
| 	 */ | |
| 	public function testUpdateBySave() | |
| 	{ | |
| 		$collection = $this->getConnection()->getCollection('customer'); | |
| 		$data = [ | |
| 			'name' => 'customer 1', | |
| 			'address' => 'customer 1 address', | |
| 		]; | |
| 		$newId = $collection->save($data); | |
|  | |
| 		$updatedId = $collection->save($data); | |
| 		$this->assertEquals($newId, $updatedId, 'Unable to update data!'); | |
|  | |
| 		$data['_id'] = $newId->__toString(); | |
| 		$updatedId = $collection->save($data); | |
| 		$this->assertEquals($newId, $updatedId, 'Unable to updated data by string id!'); | |
| 	} | |
|  | |
| 	/** | |
| 	 * @depends testFindAll | |
| 	 */ | |
| 	public function testRemove() | |
| 	{ | |
| 		$collection = $this->getConnection()->getCollection('customer'); | |
| 		$data = [ | |
| 			'name' => 'customer 1', | |
| 			'address' => 'customer 1 address', | |
| 		]; | |
| 		$id = $collection->insert($data); | |
|  | |
| 		$count = $collection->remove(['_id' => $id]); | |
| 		$this->assertEquals(1, $count); | |
|  | |
| 		$rows = $collection->findAll(); | |
| 		$this->assertEquals(0, count($rows)); | |
| 	} | |
|  | |
| 	/** | |
| 	 * @depends testFindAll | |
| 	 */ | |
| 	public function testUpdate() | |
| 	{ | |
| 		$collection = $this->getConnection()->getCollection('customer'); | |
| 		$data = [ | |
| 			'name' => 'customer 1', | |
| 			'address' => 'customer 1 address', | |
| 		]; | |
| 		$id = $collection->insert($data); | |
|  | |
| 		$newData = [ | |
| 			'name' => 'new name' | |
| 		]; | |
| 		$count = $collection->update(['_id' => $id], $newData); | |
| 		$this->assertEquals(1, $count); | |
|  | |
| 		list($row) = $collection->findAll(); | |
| 		$this->assertEquals($newData['name'], $row['name']); | |
| 	} | |
|  | |
| 	/** | |
| 	 * @depends testBatchInsert | |
| 	 */ | |
| 	public function testMapReduce() | |
| 	{ | |
| 		$collection = $this->getConnection()->getCollection('customer'); | |
| 		$rows = [ | |
| 			[ | |
| 				'name' => 'customer 1', | |
| 				'address' => 'customer 1 address', | |
| 			], | |
| 			[ | |
| 				'name' => 'customer 2', | |
| 				'address' => 'customer 2 address', | |
| 			], | |
| 		]; | |
| 		$collection->batchInsert($rows); | |
|  | |
| 		$keys = ['address' => 1]; | |
| 		$initial = ['items' => []]; | |
| 		$reduce = "function (obj, prev) { prev.items.push(obj.name); }"; | |
| 		$result = $collection->mapReduce($keys, $initial, $reduce); | |
| 		$this->assertEquals(2, count($result)); | |
| 		$this->assertNotEmpty($result[0]['address']); | |
| 		$this->assertNotEmpty($result[0]['items']); | |
| 	} | |
|  | |
| 	public function testCreateIndex() | |
| 	{ | |
| 		$collection = $this->getConnection()->getCollection('customer'); | |
| 		$columns = [ | |
| 			'name', | |
| 			'status' => \MongoCollection::DESCENDING, | |
| 		]; | |
| 		$this->assertTrue($collection->createIndex($columns)); | |
| 		$indexInfo = $collection->mongoCollection->getIndexInfo(); | |
| 		$this->assertEquals(2, count($indexInfo)); | |
| 	} | |
|  | |
| 	/** | |
| 	 * @depends testCreateIndex | |
| 	 */ | |
| 	public function testDropIndex() | |
| 	{ | |
| 		$collection = $this->getConnection()->getCollection('customer'); | |
|  | |
| 		$collection->createIndex('name'); | |
| 		$this->assertTrue($collection->dropIndex('name')); | |
| 		$indexInfo = $collection->mongoCollection->getIndexInfo(); | |
| 		$this->assertEquals(1, count($indexInfo)); | |
|  | |
| 		$this->setExpectedException('\yii\mongo\Exception'); | |
| 		$collection->dropIndex('name'); | |
| 	} | |
|  | |
| 	/** | |
| 	 * @depends testCreateIndex | |
| 	 */ | |
| 	public function testDropAllIndexes() | |
| 	{ | |
| 		$collection = $this->getConnection()->getCollection('customer'); | |
| 		$collection->createIndex('name'); | |
| 		$this->assertEquals(1, $collection->dropAllIndexes()); | |
| 		$indexInfo = $collection->mongoCollection->getIndexInfo(); | |
| 		$this->assertEquals(1, count($indexInfo)); | |
| 	} | |
| } |