Exemple #1
0
    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'])