def test_methods_in_task_name(self):
        """Ensure the resultant task name contains an encoded form of the
        methods, so that the name is unique.
        """
        from sosbeacon.event.message import get_contact_broadcast_task

        student_key = Mock()
        student_key.urlsafe.return_value = "STUDENTKEY"

        event_key = Mock()
        event_key.urlsafe.return_value = "EVENTKEY"

        message_key = Mock()
        message_key.urlsafe.return_value = "MESSAGEKEY"

        batch_id = "BATCHID"

        contact_one = {
            "name": "Johny Jones",
            "methods": ({"type": "t", "value": "1234567890"}, {"type": "e", "value": "*****@*****.**"}),
        }

        contact_two = {
            "name": "Johny Jones",
            "methods": ({"type": "t", "value": "1234567890"}, {"type": "e", "value": "*****@*****.**"}),
        }

        task_one = get_contact_broadcast_task(event_key, message_key, student_key, contact_one, batch_id)

        task_two = get_contact_broadcast_task(event_key, message_key, student_key, contact_two, batch_id)

        self.assertNotEqual(task_one.name, task_two.name)
    def test_task_params(self):
        """Ensure the resultant task parms contain all info."""
        from sosbeacon.event.message import get_contact_broadcast_task

        student_key = Mock()
        student_key.urlsafe.return_value = "ASTUDENTKEY"

        event_key = Mock()
        event_key.urlsafe.return_value = "ANEVENTKEY"

        message_key = Mock()
        message_key.urlsafe.return_value = "SOMEMESSAGEKEY"

        batch_id = "THEBATCHID"

        contact = {
            "name": "Johny Jones",
            "methods": ({"type": "t", "value": "1234567890"}, {"type": "e", "value": "*****@*****.**"}),
        }

        task = get_contact_broadcast_task(event_key, message_key, student_key, contact, batch_id)

        check_params = {
            "student": "ASTUDENTKEY",
            "event": "ANEVENTKEY",
            "message": "SOMEMESSAGEKEY",
            "batch": "THEBATCHID",
            "contact": json.dumps(contact),
        }
        self.assertEqual(check_params, task.extract_params())
    def test_task_name(self):
        """Ensure the resultant task name contains enough to be unique."""
        from sosbeacon.event.message import get_contact_broadcast_task

        student_key = Mock()
        student_key.urlsafe.return_value = "STUDENTKEY"

        event_key = Mock()
        event_key.urlsafe.return_value = "EVENTKEY"

        message_key = Mock()
        message_key.urlsafe.return_value = "MESSAGEKEY"

        batch_id = "BATCHID"

        contact = {
            "name": "Johny Jones",
            "methods": ({"type": "t", "value": "1234567890"}, {"type": "e", "value": "*****@*****.**"}),
        }

        task = get_contact_broadcast_task(event_key, message_key, student_key, contact, batch_id)

        self.assertIn("STUDENTKEY", task.name)
        self.assertNotIn("EVENTKEY", task.name)
        self.assertIn("MESSAGEKEY", task.name)
        self.assertIn("BATCHID", task.name)
        self.assertNotIn("*****@*****.**", task.name)
    def test_no_methods(self):
        """Ensure no task is returned when there are no contact methods."""
        # raise Exception("Make sure it doesn't send a task if no methods.")
        from sosbeacon.event.message import get_contact_broadcast_task

        student_key = Mock()
        student_key.urlsafe.return_value = "ASTUDENTKEY"

        event_key = Mock()
        event_key.urlsafe.return_value = "SOMEEVENTKEY"

        message_key = Mock()
        message_key.urlsafe.return_value = "SOMEMESSAGEKEY"

        batch_id = "THEBATCHID"

        contact = {"name": "Johny Jones", "methods": ()}

        task = get_contact_broadcast_task(event_key, message_key, student_key, contact, batch_id)

        self.assertIsNone(task)
    def test_missing_methods(self):
        """Ensure there is no exception raised and no task is return when the
        methods key is missing.
        """
        # raise Exception("Make sure it doesn't send a task if no methods.")
        from sosbeacon.event.message import get_contact_broadcast_task

        student_key = Mock()
        student_key.urlsafe.return_value = "ASTUDENTKEY"

        event_key = Mock()
        event_key.urlsafe.return_value = "ANEVENTKEY"

        message_key = Mock()
        message_key.urlsafe.return_value = "SOMEMESSAGEKEY"

        batch_id = "THEBATCHID"

        contact = {"name": "Johny Jones"}

        ret_value = get_contact_broadcast_task(event_key, message_key, student_key, contact, batch_id)

        self.assertIsNone(ret_value)