def test_beacon_valid_request_response(self): # Invalid account id returns empty response r = self.get_beacon(account_id="foo", page_url="http://foo.com/bar") self.assertIsInstance(r, dict) self.assertEqual(r.keys(), ['status']) # Create inactive account account = Account(name="Foo Bar", sites=["foo.com"], enabled=False) db.session.add(account) db.session.commit() # Inactive account returns empty response r = self.get_beacon(account_id=account.uuid, page_url="http://foo.com/bar") self.assertIsInstance(r, dict) self.assertEqual(r.keys(), ['status']) # Activate account account.enabled = True db.session.add(account) db.session.commit() # Active account with bad url returns empty response r = self.get_beacon(account_id=account.uuid, page_url="http://bad.com/bar") self.assertIsInstance(r, dict) self.assertEqual(r.keys(), ['status']) # Active account with good url returns new visitor id r = self.get_beacon(account_id=account.uuid, page_url="http://foo.com/bar") self.assertIn('visitor_id', r) visitor_id = r['visitor_id'] # Return submitted visitor id if provided r = self.get_beacon(account_id=account.uuid, page_url="http://foo.com/bar", visitor_id=visitor_id) self.assertEqual(visitor_id, r['visitor_id']) # Configure placeholders, components and segments for account rule = Rule(field="page_url", comparator="START_WITH", value="http://foo.com/yes") db.session.add(rule) segment = Segment(name="My Segment", rules=[rule]) db.session.add(segment) component = Component(name="My Component", segment=segment, markup="<h1>My Component</h1>") db.session.add(component) placeholder = Placeholder(name="My Placeholder", components=[component]) db.session.add(placeholder) db.session.add(account) account.placeholders = [placeholder] account.segments = [segment] db.session.commit() # Refresh objects in db session after commit db.session.refresh(account) db.session.refresh(rule) db.session.refresh(segment) db.session.refresh(component) db.session.refresh(placeholder) # Unknown placeholder ids returns empty set of components r = self.get_beacon(account_id=account.uuid, page_url="http://foo.com", visitor_id=visitor_id, placeholders="ape-foo") self.assertIn('components', r) self.assertEqual(dict(), r['components']) # Known placeholder ids with no matching components returns empty set of components placeholder_str = "ape-" + placeholder.uuid r = self.get_beacon(account_id=account.uuid, page_url="http://foo.com/nope", visitor_id=visitor_id, placeholders=placeholder_str) self.assertIn('components', r) self.assertEqual(dict(), r['components']) # Known placeholder ids with matching components returns set of components placeholder_str = "ape-" + placeholder.uuid r = self.get_beacon(account_id=account.uuid, page_url="http://foo.com/yes", visitor_id=visitor_id, placeholders=placeholder_str) self.assertIn('components', r) self.assertIn(placeholder_str, r['components']) self.assertIn('content', r['components'][placeholder_str]) self.assertEqual(component.markup, r['components'][placeholder_str]['content'])