def testAlarmWithPayment(self): # Create smartphone report sensor self.smartphone_sensor_type = SensorType.Create(self.e) schema = {'agreement': {'unit': '1-5 scale'}} self.smartphone_sensor_type.Update(name="Report Sensor", schema=json.dumps(schema)) self.smartphone_sensor_type.put() self.smartphone_sensor = Sensor.Create( self.e, "1000", self.smartphone_sensor_type.key().id()) self.smartphone_sensor.Update( sensortype_id=self.smartphone_sensor_type.key().id(), name="Smartphone Reports 1", contacts={"user": self.owner.key().id()}) self.smartphone_sensor.put() # Create smartphone report rule with payment on any report PMNT_AMOUNT = 10.0 self.any_report_rule = Rule.Create(self.e) self.any_report_rule.Update( name="Any Report", sensortype_id=self.smartphone_sensor_type.key().id(), column="agreement", trigger=RULE.ANY_DATA, payment_contacts=["user"], payment_amount=PMNT_AMOUNT, consecutive_limit=RULE. ANY, # Deactivate immediately (should be == 1) duration=0) self.any_report_rule.put() self.assertTrue(self.any_report_rule.payments_enabled()) self.process = ProcessTask.Create(self.e) self.process.Update(rule_ids=[self.any_report_rule.key().id()]) self.process.put() # Apply our process to our sensor self.sp = SensorProcessTask.Create(self.e, self.process, self.smartphone_sensor) self.sp.put() BATCH_SIZE = 3 BATCH_1 = { 'agreement': [random.randint(1, 5) for x in range(BATCH_SIZE)], } self.__createNewRecords(BATCH_1, first_dt=datetime.now(), sensor=self.smartphone_sensor) self.__runProcessing() # This batch should have fired 3 alarms for any report, and created # 3 payments. pmnts = Payment.Fetch(self.owner) self.assertEqual(len(pmnts), 3) total_payments = BATCH_SIZE * PMNT_AMOUNT self.assertEqual(total_payments, sum([p.amount for p in pmnts]))