Home Manual Reference Source Test Repository

client/searching/search.spec.js

define(function () {
	mocha.setup('bdd');
	/** 
		@test {InternalOpenGateAPI#devicesSearchBuilder} 
		@test {InternalOpenGateAPI#subscribersSearchBuilder} 		
		@test {InternalOpenGateAPI#subscriptionsSearchBuilder} 
		@test {InternalOpenGateAPI#executionsSearchBuilder} 
		@test {InternalOpenGateAPI#operationsSearchBuilder} 
		@test {InternalOpenGateAPI#alarmsSearchBuilder}  
		@test {InternalOpenGateAPI#bundlesSearchBuilder} 
	*/
	describe('Check funcionality newSearchBuilder module:', function () {

		/** @test {SearchBuilder}  */
		describe('Check setting timeout', function (done) {
			/** @test {SearchBuilder#withTimeout}  */
			it('Throw error on exceeded timeout', function () {
				ogapi.devicesSearchBuilder().onProvisioned().addSortBy('prov.customId', 'ASCENDING').summary().withTimeout(10).build().execute().catch(function (err) {
					assert.equal(err.message, "Timeout exceeded");
					done();
				});
			});
			/** @test {SearchBuilder#withTimeout}  */
			it('It is all ok when not exceeded timeout', function () {
				ogapi.devicesSearchBuilder().onProvisioned().addSortBy('prov.customId', 'ASCENDING').summary().withTimeout(10000).build().execute().then(function (response, statusCode) {
					assert.equal(statusCode, 200);
					done();
				});
			});
			/** @test {SearchBuilder#withTimeout}  */
			it('Check default timeout value when it is no setted', function () {
				assert.strictEqual(ogapi.devicesSearchBuilder().onProvisioned().build()._timeout, 5000);
			});
			/** @test {SearchBuilder#withTimeout}  */
			it('withTimeout parameter must be a number', function () {
				assert.throws(function () { ogapi.devicesSearchBuilder().withTimeout("a"); }, "Parameter ms must be a number");
			});
		});
		/** @test {SearchBuilder}*/
		describe('Check on entity searching:', function () {
			/** @test {SearchBuilder#filter}*/
			describe('with empty filter:', function () {

				/** @test {SearchBuilder#build} 
					@test {SearchBuilder#filter}
					@test {EntitySearchBuilder#onProvisioned}
					@test {InternalOpenGateAPI#devicesSearchBuilder}
				*/
				it('devicesSearchBuilder', function () {
					assert.doesNotThrow(function () { ogapi.devicesSearchBuilder().filter().onProvisioned().build(); });
				});

				/** @test {SearchBuilder#build} 
					@test {SearchBuilder#filter}
					@test {EntitySearchBuilder#onProvisioned}
					@test {InternalOpenGateAPI#subscriptionsSearchBuilder}
				*/
				it('subscriptionsSearchBuilder', function () {
					assert.doesNotThrow(function () { ogapi.subscriptionsSearchBuilder().filter().onProvisioned().build(); });
				});

				/** @test {SearchBuilder#build} 
					@test {SearchBuilder#filter}
					@test {EntitySearchBuilder#onProvisioned}
					@test {InternalOpenGateAPI#subscribersSearchBuilder}
				*/
				it('subscribersSearchBuilder', function () {
					assert.doesNotThrow(function () { ogapi.subscribersSearchBuilder().filter().onProvisioned().build(); });
				});
			});
			describe('On sort:', function () {
				/** @test {SearchBuilder#build} 
					@test {SearchBuilder#addSortAscendingBy}
					@test {EntitySearchBuilder#onProvisioned}
					@test {InternalOpenGateAPI#devicesSearchBuilder}
				*/
				it('Ascending sort', function () {
					assert.deepEqual(ogapi.devicesSearchBuilder().onProvisioned().addSortAscendingBy('param').build()._postObj.sort, { parameters: [{ name: 'param', type: 'ASCENDING' }] });
				});
				/** @test {SearchBuilder#build} 
					@test {SearchBuilder#addSortDescendingBy}
					@test {EntitySearchBuilder#onProvisioned}
					@test {InternalOpenGateAPI#devicesSearchBuilder}
				*/
				it('Ascending sort', function () {
					assert.deepEqual(ogapi.devicesSearchBuilder().onProvisioned().addSortDescendingBy('param').build()._postObj.sort, { parameters: [{ name: 'param', type: 'DESCENDING' }] });
				});
				/** @test {SearchBuilder#build} 
					@test {SearchBuilder#addSortBy}
					@test {EntitySearchBuilder#onProvisioned}
					@test {InternalOpenGateAPI#devicesSearchBuilder}
				*/
				it('Generic sort', function () {
					assert.deepEqual(ogapi.devicesSearchBuilder().onProvisioned().addSortBy('param', 'sorting').build()._postObj.sort, { parameters: [{ name: 'param', type: 'sorting' }] });
				});
			});
			describe('with empty filter:', function () {
				/** @test {SearchBuilder#build} 
					@test {SearchBuilder#filter}
					@test {EntitySearchBuilder#onProvisioned}
					@test {InternalOpenGateAPI#devicesSearchBuilder}
				*/
				it('devicesSearchBuilder', function () {
					assert.doesNotThrow(function () { ogapi.devicesSearchBuilder().filter().onProvisioned().build(); });
				});
				/** @test {SearchBuilder#build} 
					@test {SearchBuilder#filter}
					@test {EntitySearchBuilder#onProvisioned}
					@test {InternalOpenGateAPI#subscriptionsSearchBuilder}
				*/
				it('subscriptionsSearchBuilder', function () {
					assert.doesNotThrow(function () { ogapi.subscriptionsSearchBuilder().filter().onProvisioned().build(); });
				});
				/** @test {SearchBuilder#build} 
					@test {SearchBuilder#filter}
					@test {EntitySearchBuilder#onProvisioned}
					@test {InternalOpenGateAPI#subscribersSearchBuilder}
				*/
				it('subscribersSearchBuilder', function () {
					assert.doesNotThrow(function () { ogapi.subscribersSearchBuilder().filter().onProvisioned().build(); });
				});
			});
			/** @test {SearchBuilder#build} 
				@test {SearchBuilder#filter}
				@test {EntitySearchBuilder#onProvisioned}
				@test {InternalOpenGateAPI#devicesSearchBuilder}
			*/
			describe('using filterBuilder:', function () {
				it('simple filter', function () {
					var filterExpected = JSON.parse("{\"and\":[{\"like\":{\"hello\":\"world\"}}]}");
					assert.deepEqual(ogapi.devicesSearchBuilder().
						onProvisioned().
						filter(
							ogapi.newFilterBuilder().
								and(ogapi.EX.like("hello", "world")))
						.build()._postObj.filter, filterExpected);
				});
			});
			/** @test {SearchBuilder#limit}*/
			describe('On limit:', function () {
				it('undefined size parameter', function () {
					assert.throws(function () { ogapi.devicesSearchBuilder().limit(); }, 'size parameter must be a number');
				});
				it('size parameter not a number', function () {
					assert.throws(function () { ogapi.devicesSearchBuilder().limit('5'); }, 'size parameter must be a number');
				});
				it('well build with only size', function () {
					assert.deepEqual(ogapi.devicesSearchBuilder().limit(5).onProvisioned().build()._postObj.limit, { size: 5, start: 1 });
				});
				it('well build with size and offset', function () {
					assert.deepEqual(ogapi.devicesSearchBuilder().limit(5, 15).onProvisioned().build()._postObj.limit, { size: 5, start: 15 });
				});
			});

			/** @test {EntitySearchBuilder#onProvisioned}*/
			describe('On provisioned data:', function () {
				/** @test {DevicesSearchBuilder#onProvisioned}*/
				it('devicesSearchBuilder', function () {
					assert.strictEqual(ogapi.devicesSearchBuilder().onProvisioned().build()._resource, 'search/entities/devices/provision');
				});
				/** @test {SubscriptionsSearchBuilder#onProvisioned}*/
				it('subscriptionsSearchBuilder', function () {
					assert.strictEqual(ogapi.subscriptionsSearchBuilder().onProvisioned().build()._resource, 'search/entities/subscriptions/provision');
				});
				/** @test {SubscribersSearchBuilder#onProvisioned}*/
				it('subscribersSearchBuilder', function () {
					assert.strictEqual(ogapi.subscribersSearchBuilder().onProvisioned().build()._resource, 'search/entities/subscribers/provision');
				});
			});
			/** @test {EntitySearchBuilder#onCollected}*/
			describe('On collected data:', function () {
				/** @test {DevicesSearchBuilder#onCollected}*/
				it('devicesSearchBuilder', function () {
					assert.strictEqual(ogapi.devicesSearchBuilder().onCollected().build()._resource, 'search/entities/devices/collection');
				});
				/** @test {SubscriptionsSearchBuilder#onCollected}*/
				it('subscriptionsSearchBuilder', function () {
					assert.strictEqual(ogapi.subscriptionsSearchBuilder().onCollected().build()._resource, 'search/entities/subscriptions/collection');
				});
				/** @test {SubscribersSearchBuilder#onCollected}*/
				it('subscribersSearchBuilder', function () {
					assert.strictEqual(ogapi.subscribersSearchBuilder().onCollected().build()._resource, 'search/entities/subscribers/collection');
				});
			});
			/** @test {SearchBuilder#build}*/
			describe('On collected and provisioned data:', function () {
				/** @test {DevicesSearchBuilder#build}*/
				it('devicesSearchBuilder', function () {
					assert.strictEqual(ogapi.devicesSearchBuilder().onCollected().onProvisioned().build()._resource, 'search/entities/devices');
				});
				/** @test {SubscriptionsSearchBuilder#build}*/
				it('subscriptionsSearchBuilder', function () {
					assert.strictEqual(ogapi.subscriptionsSearchBuilder().onCollected().onProvisioned().build()._resource, 'search/entities/subscriptions');
				});
				/** @test {SubscribersSearchBuilder#build}*/
				it('subscribersSearchBuilder', function () {
					assert.strictEqual(ogapi.subscribersSearchBuilder().onCollected().onProvisioned().build()._resource, 'search/entities/subscribers');
				});
			});
			/** @test {SearchBuilder#summary}*/
			describe('Summary data:', function () {
				describe('without source data:', function () {
					/** 
						@test {DevicesSearchBuilder#summary}
						@test {DevicesSearchBuilder#build}	
					*/
					it('devicesSearchBuilder', function () {
						assert.throws(function () { ogapi.devicesSearchBuilder().summary().build(); }, 'Must select one at least: ["onProvisioned","onCollected"]');
					});
					/** 
						@test {SubscriptionsSearchBuilder#summary}
						@test {SubscriptionsSearchBuilder#build}	
					*/
					it('subscriptionsSearchBuilder', function () {
						assert.throws(function () { ogapi.subscriptionsSearchBuilder().summary().build(); }, 'Must select one at least: ["onProvisioned","onCollected"]');
					});
					/** 
						@test {SubscribersSearchBuilder#summary}
						@test {SubscribersSearchBuilder#build}	
					*/
					it('subscribersSearchBuilder', function () {
						assert.throws(function () { ogapi.subscribersSearchBuilder().summary().build(); }, 'Must select one at least: ["onProvisioned","onCollected"]');
					});
				});
				/** 
					@test {SearchBuilder#summary}
					@test {EntitySearchBuilder#onProvisioned}
				*/
				describe('On provisioned data:', function () {
					/** 
						@test {DevicesSearchBuilder#summary}
						@test {DevicesSearchBuilder#onProvisioned}
					*/
					it('devicesSearchBuilder', function () {
						assert.strictEqual(ogapi.devicesSearchBuilder().onProvisioned().summary().build()._resource, 'search/entities/devices/provision/summary');
					});
					/** 
						@test {SubscriptionsSearchBuilder#summary}
						@test {SubscriptionsSearchBuilder#onProvisioned}
					*/
					it('subscriptionsSearchBuilder', function () {
						assert.strictEqual(ogapi.subscriptionsSearchBuilder().onProvisioned().summary().build()._resource, 'search/entities/subscriptions/provision/summary');
					});
					/** 
						@test {SubscribersSearchBuilder#summary}
						@test {SubscribersSearchBuilder#onProvisioned}
					*/
					it('subscribersSearchBuilder', function () {
						assert.strictEqual(ogapi.subscribersSearchBuilder().onProvisioned().summary().build()._resource, 'search/entities/subscribers/provision/summary');
					});
				});
				describe('On collected data:', function () {
					/** 
						@test {DevicesSearchBuilder#summary}
						@test {DevicesSearchBuilder#onProvisioned}
					*/
					it('devicesSearchBuilder', function () {
						assert.strictEqual(ogapi.devicesSearchBuilder().onCollected().summary().build()._resource, 'search/entities/devices/collection/summary');
					});
					/** 
						@test {SubscriptionsSearchBuilder#summary}
						@test {SubscriptionsSearchBuilder#onProvisioned}
					*/
					it('subscriptionsSearchBuilder', function () {
						assert.strictEqual(ogapi.subscriptionsSearchBuilder().onCollected().summary().build()._resource, 'search/entities/subscriptions/collection/summary');
					});
					/** 
						@test {SubscribersSearchBuilder#summary}
						@test {SubscribersSearchBuilder#onProvisioned}
					*/
					it('subscribersSearchBuilder', function () {
						assert.strictEqual(ogapi.subscribersSearchBuilder().onCollected().summary().build()._resource, 'search/entities/subscribers/collection/summary');
					});
				});
				describe('On collected and provisioned data', function () {
					/** 
						@test {DevicesSearchBuilder#summary}
						@test {DevicesSearchBuilder#build}
					*/
					it('devicesSearchBuilder', function () {
						assert.strictEqual(ogapi.devicesSearchBuilder().onCollected().onProvisioned().summary().build()._resource, 'search/entities/devices/summary');
					});
					/** 
						@test {SubscriptionsSearchBuilder#summary}
						@test {SubscriptionsSearchBuilder#build}
					*/
					it('subscriptionsSearchBuilder', function () {
						assert.strictEqual(ogapi.subscriptionsSearchBuilder().onCollected().onProvisioned().summary().build()._resource, 'search/entities/subscriptions/summary');
					});
					/** 
						@test {SubscribersSearchBuilder#summary}
						@test {SubscribersSearchBuilder#build}
					*/
					it('subscribersSearchBuilder', function () {
						assert.strictEqual(ogapi.subscribersSearchBuilder().onCollected().onProvisioned().summary().build()._resource, 'search/entities/subscribers/summary');
					});
				});

			});
			describe('On without source data:', function () {
				/** 
					@test {DevicesSearchBuilder#summary}
					@test {DevicesSearchBuilder#build}
				*/
				it('devicesSearchBuilder', function () {
					assert.throws(function () { ogapi.devicesSearchBuilder().build(); }, 'Must select one at least: ["onProvisioned","onCollected"]');
				});
				/** 
					@test {SubscriptionsSearchBuilder#summary}
					@test {SubscriptionsSearchBuilder#build}
				*/
				it('subscriptionsSearchBuilder', function () {
					assert.throws(function () { ogapi.subscriptionsSearchBuilder().build(); }, 'Must select one at least: ["onProvisioned","onCollected"]');
				});
				/** 
					@test {SubscribersSearchBuilder#summary}
					@test {SubscribersSearchBuilder#build}
				*/
				it('subscribersSearchBuilder', function () {
					assert.throws(function () { ogapi.subscribersSearchBuilder().build(); }, 'Must select one at least: ["onProvisioned","onCollected"]');
				});
			});
		});

		describe('Check on operation searching:', function () {
			/** 				
				@test {ExecutionsSearchBuilder#build}
			*/
			it('without source data', function () {
				assert.throws(function () { ogapi.executionsSearchBuilder().build(); }, 'Must select one at least: ["onDevices","onSubscribers","onSubscriptions","onCommunicationsModules"]');
			});
			/** 				
				@test {ExecutionsSearchBuilder#build}
			*/
			it('single source data', function () {
				assert.doesNotThrow(function () { ogapi.executionsSearchBuilder().onDevices().build(); });
			});
			/** 				
				@test {ExecutionsSearchBuilder#build}
			*/
			it('multiple source data', function () {
				assert.throws(function () { ogapi.executionsSearchBuilder().onDevices().onSubscriptions().build(); }, 'Must select only one of this:["onDevices","onSubscribers","onSubscriptions","onCommunicationsModules"]');
			});

			describe('all kind source data:', function () {
				/** @test {ExecutionsSearchBuilder#onDevices}*/
				it('from devices', function () {
					assert.strictEqual(ogapi.executionsSearchBuilder().onDevices().build()._resource, 'search/entities/devices/operations');
				});
				/** @test {ExecutionsSearchBuilder#onSubscriptions}*/
				it('from subscriptions', function () {
					assert.strictEqual(ogapi.executionsSearchBuilder().onSubscriptions().build()._resource, 'search/entities/subscriptions/operations');
				});
				/** @test {ExecutionsSearchBuilder#onSubscribers}*/
				it('from subscribers', function () {
					assert.strictEqual(ogapi.executionsSearchBuilder().onSubscribers().build()._resource, 'search/entities/subscribers/operations');
				});
				/** @test {ExecutionsSearchBuilder#onCommunicationsModules}*/
				it('from communicationsModules', function () {
					assert.strictEqual(ogapi.executionsSearchBuilder().onCommunicationsModules().build()._resource, 'search/entities/communicationsModules/operations');
				});
				describe('summary:', function () {
					/** @test {ExecutionsSearchBuilder#summary}*/
					it('from devices', function () {
						assert.strictEqual(ogapi.executionsSearchBuilder().onDevices().summary().build()._resource, 'search/entities/devices/operations/summary');
					});
					/** @test {ExecutionsSearchBuilder#summary}*/
					it('from subscriptions', function () {
						assert.strictEqual(ogapi.executionsSearchBuilder().onSubscriptions().summary().build()._resource, 'search/entities/subscriptions/operations/summary');
					});
					/** @test {ExecutionsSearchBuilder#summary}*/
					it('from subscribers', function () {
						assert.strictEqual(ogapi.executionsSearchBuilder().onSubscribers().summary().build()._resource, 'search/entities/subscribers/operations/summary');
					});
					/** @test {ExecutionsSearchBuilder#summary}*/
					it('from communicationsModules', function () {
						assert.strictEqual(ogapi.executionsSearchBuilder().onCommunicationsModules().summary().build()._resource, 'search/entities/communicationsModules/operations/summary');
					});
				});
			});
		});
		describe('Check on alarm searching:', function () {
			/** @test {AlarmsSearchBuilder#build}*/
			it('without source data', function () {
				assert.throws(function () { ogapi.alarmsSearchBuilder().build(); }, 'Must select one at least: ["onDevices","onSubscribers","onSubscriptions","onCommunicationsModules"]');
			});
			/** @test {AlarmsSearchBuilder#build}*/
			it('single source data', function () {
				assert.doesNotThrow(function () { ogapi.alarmsSearchBuilder().onDevices().build(); });
			});
			/** @test {AlarmsSearchBuilder#build}*/
			it('multiple source data', function () {
				assert.throws(function () { ogapi.alarmsSearchBuilder().onDevices().onSubscriptions().build(); }, 'Must select only one of this:["onDevices","onSubscribers","onSubscriptions","onCommunicationsModules"]');
			});

			describe('all kind source data:', function () {
				/** @test {AlarmsSearchBuilder#onDevices}*/
				it('from devices', function () {
					assert.strictEqual(ogapi.alarmsSearchBuilder().onDevices().build()._resource, 'search/entities/devices/alarms');
				});
				/** @test {AlarmsSearchBuilder#onSubscriptions}*/
				it('from subscriptions', function () {
					assert.strictEqual(ogapi.alarmsSearchBuilder().onSubscriptions().build()._resource, 'search/entities/subscriptions/alarms');
				});
				/** @test {AlarmsSearchBuilder#onSubscribers}*/
				it('from subscribers', function () {
					assert.strictEqual(ogapi.alarmsSearchBuilder().onSubscribers().build()._resource, 'search/entities/subscribers/alarms');
				});
				/** @test {AlarmsSearchBuilder#onCommunicationsModules}*/
				it('from communicationsModules', function () {
					assert.strictEqual(ogapi.alarmsSearchBuilder().onCommunicationsModules().build()._resource, 'search/entities/communicationsModules/alarms');
				});
				describe('summary:', function () {
					/** @test {AlarmsSearchBuilder#summary}*/
					it('from devices', function () {
						assert.strictEqual(ogapi.alarmsSearchBuilder().onDevices().summary().build()._resource, 'search/entities/devices/alarms/summary');
					});
					/** @test {AlarmsSearchBuilder#summary}*/
					it('from subscriptions', function () {
						assert.strictEqual(ogapi.alarmsSearchBuilder().onSubscriptions().summary().build()._resource, 'search/entities/subscriptions/alarms/summary');
					});
					/** @test {AlarmsSearchBuilder#summary}*/
					it('from subscribers', function () {
						assert.strictEqual(ogapi.alarmsSearchBuilder().onSubscribers().summary().build()._resource, 'search/entities/subscribers/alarms/summary');
					});
					/** @test {AlarmsSearchBuilder#summary}*/
					it('from communicationsModules', function () {
						assert.strictEqual(ogapi.alarmsSearchBuilder().onCommunicationsModules().summary().build()._resource, 'search/entities/communicationsModules/alarms/summary');
					});
				});
			});
		});
		describe('Check on bundles searching:', function () {
			/** @test {BundlesSearchBuilder#build}*/
			it('bundlesSearchBuilder', function () {
				assert.strictEqual(ogapi.bundlesSearchBuilder().build()._resource, 'search/bundles');
			});
			describe('On Limit:', function () {
				/** @test {bundlesSearchBuilder#build} 
				*/
				it('limit', function () {
					assert.deepEqual(ogapi.bundlesSearchBuilder().limit(5, 1).build()._postObj.limit, { size: 5, start: 1 });
				});
				it('simple filter', function () {
					var filterExpected = JSON.parse("{\"and\":[{\"like\":{\"bundle.Name\":\"bundle_carlos\"}}]}");
					assert.deepEqual(ogapi.bundlesSearchBuilder().filter(ogapi.newFilterBuilder().
						and(ogapi.EX.like("bundle.Name", "bundle_carlos")))
						.build()._postObj.filter, filterExpected);
				});
			});
		});
	});
});