def test_rejected_method(self):
     """ object.rejected should return a list of objects with status 'r' """
     self.assertEqual(len(self.obj.rejected()), 0)
     r = TempLanguage(code="qaa-x-ghijkl", status="r")
     r.save()
     returned = self.obj.rejected()
     self.assertEqual(len(returned), 1)
     self.assertIn(r, returned)
 def test_rejected_method(self):
     """ object.rejected should return a list of objects with status 'r' """
     self.assertEqual(len(self.obj.rejected()), 0)
     r = TempLanguage(code="qaa-x-ghijkl", status="r")
     r.save()
     returned = self.obj.rejected()
     self.assertEqual(len(returned), 1)
     self.assertIn(r, returned)
 def test_approved_method(self):
     """ object.approved should return a list of objects with status 'a' """
     self.assertEqual(len(self.obj.approved()), 0)
     a = TempLanguage(code="qaa-x-ghijkl", status="a")
     a.save()
     returned = self.obj.approved()
     self.assertEqual(len(returned), 1)
     self.assertIn(a, returned)
 def test_approved_method(self):
     """ object.approved should return a list of objects with status 'a' """
     self.assertEqual(len(self.obj.approved()), 0)
     a = TempLanguage(code="qaa-x-ghijkl", status="a")
     a.save()
     returned = self.obj.approved()
     self.assertEqual(len(returned), 1)
     self.assertIn(a, returned)
 def setUp(self):
     self.obj = TempLanguage(code="qaa-x-abcdef", name="Temporary Language")
     self.obj.save()
     self.obj.questionnaire = Questionnaire.objects.create(questions=[
         {
             "id": 0,
             "text": "What do you call your language?",
             "help": "Test help text",
             "required": True,
             "input_type": "string",
             "sort": 1,
             "depends_on": None
         },
         {
             "id": 1,
             "text": "Second Question",
             "help": "Test help text",
             "required": True,
             "input_type": "string",
             "sort": 2,
             "depends_on": None
         }
     ])
     self.obj.answers = [
         {
             'question_id': 0,
             'text': 'wonderful'
         }
     ]
     self.obj.save()
 def test_lang_assigned_map_method(self):
     """ lang_assigned_map should return a list of dictionary of object.code: object.lang_assigned.code """
     self.assertListEqual(self.obj.lang_assigned_map(),
                          [{
                              "qaa-x-abcdef": "qaa-x-abcdef"
                          }])
     TempLanguage(code="qaa-x-123456").save()
     returned = self.obj.lang_assigned_map()
     self.assertEquals(len(returned), 2)
     self.assertIn({"qaa-x-abcdef": "qaa-x-abcdef"}, returned)
     self.assertIn({"qaa-x-123456": "qaa-x-123456"}, returned)
 def setUp(self):
     self.obj = TempLanguage(code="qaa-x-abcdef", name="Temporary Language")
     self.obj.save()
     self.obj.questionnaire = Questionnaire.objects.create(
         questions=[{
             "id": 0,
             "text": "What do you call your language?",
             "help": "Test help text",
             "required": True,
             "input_type": "string",
             "sort": 1,
             "depends_on": None
         }, {
             "id": 1,
             "text": "Second Question",
             "help": "Test help text",
             "required": True,
             "input_type": "string",
             "sort": 2,
             "depends_on": None
         }])
     self.obj.answers = [{'question_id': 0, 'text': 'wonderful'}]
     self.obj.save()
    def post(self, request, *args, **kwargs):
        # First pass only. Will need more validation and refactoring
        data = list()
        answers = list()
        answer_list = list()
        answer_text_list = list()
        obj_list = list()
        try:
            message = ""
            data = request.POST if len(request.POST) else json.loads(request.body)
            questionnaire = Questionnaire.objects.get(pk=data.get("questionnaire_id"))
            field_mapping = questionnaire.field_mapping
            answers = json.loads(data.get("answers")) if len(request.POST) else data.get("answers")

            obj = TempLanguage(code=data.get("temp_code"), questionnaire=questionnaire, app=data.get("app"),
                               request_id=data.get("request_id"), requester=data.get("requester"),
                               answers=answers)

            for answer in answers:
                answer_list.append(answer)
                qid = str(answer.get("question_id"))
                if qid is not None and qid in field_mapping:
                    answer_text = answer.get("text")
                    answer_text_list.append(answer_text)
                    if field_mapping[qid] == "country":
                        obj.country = Country.objects.get(name__iexact=answer_text)
                        obj_list.append(obj.country and obj.country.name)
                    elif field_mapping[qid] == "direction":
                        obj.direction = "l" if answer_text.lower() == "yes" else "r"
                        obj_list.append(obj.direction)
                    else:
                        obj.__dict__[field_mapping[qid]] = answer_text
                        obj_list.append(obj.__dict__[field_mapping[qid]])

            obj.save()

        except Questionnaire.DoesNotExist:
            message = "questionnaire_id given does not return a matching Questionnaire object"
        except Country.DoesNotExist:
            message = "The answer for country results in an invalid lookup"
        except Exception as e:
            message = e.message

        return JsonResponse(
            {
                "status": "error" if message else "success",
                "message": message or "Request submitted",
                "debug": {
                    "data": data or "no data",
                    "answers": answers or "no answers",
                    "answer_list": answer_list or "no answer_list",
                    "answer_text_list": answer_text_list or "no answer_text_list",
                    "obj_list": obj_list or "no obj_list"
                }
            }
        )
class TempLanguageTestCase(TestCase):

    def setUp(self):
        self.obj = TempLanguage(code="qaa-x-abcdef", name="Temporary Language")
        self.obj.save()
        self.obj.questionnaire = Questionnaire.objects.create(questions=[
            {
                "id": 0,
                "text": "What do you call your language?",
                "help": "Test help text",
                "required": True,
                "input_type": "string",
                "sort": 1,
                "depends_on": None
            },
            {
                "id": 1,
                "text": "Second Question",
                "help": "Test help text",
                "required": True,
                "input_type": "string",
                "sort": 2,
                "depends_on": None
            }
        ])
        self.obj.answers = [
            {
                'question_id': 0,
                'text': 'wonderful'
            }
        ]
        self.obj.save()

    def test_string_representation(self):
        """ __str__() should returned the model's code """
        self.assertEquals(str(self.obj), "qaa-x-abcdef")

    def test_get_absolute_url(self):
        """ get_absolute_url should return the URL to the detail page """
        self.assertEquals(self.obj.get_absolute_url(), reverse("templanguage_detail", args=[str(self.obj.id)]))

    def test_lang_assigned_url_property(self):
        """ lang_assigned_url should return the URL to the detail page of model's lang_assigned related object """
        self.assertEquals(self.obj.lang_assigned_url, reverse("language_detail", args=[str(self.obj.lang_assigned_id)]))

    def test_name_property(self):
        """ object.name should return its name """
        self.assertEquals(self.obj.name, "Temporary Language")

    def test_pending_method(self):
        """ object.pending should return a list of objects with status 'p' """
        returned = self.obj.pending()
        self.assertEqual(len(returned), 1)
        self.assertIn(self.obj, returned)

    def test_approved_method(self):
        """ object.approved should return a list of objects with status 'a' """
        self.assertEqual(len(self.obj.approved()), 0)
        a = TempLanguage(code="qaa-x-ghijkl", status="a")
        a.save()
        returned = self.obj.approved()
        self.assertEqual(len(returned), 1)
        self.assertIn(a, returned)

    def test_rejected_method(self):
        """ object.rejected should return a list of objects with status 'r' """
        self.assertEqual(len(self.obj.rejected()), 0)
        r = TempLanguage(code="qaa-x-ghijkl", status="r")
        r.save()
        returned = self.obj.rejected()
        self.assertEqual(len(returned), 1)
        self.assertIn(r, returned)

    def test_lang_assigned_map_method(self):
        """ lang_assigned_map should return a list of dictionary of object.code: object.lang_assigned.code """
        self.assertListEqual(self.obj.lang_assigned_map(), [{"qaa-x-abcdef": "qaa-x-abcdef"}])
        TempLanguage(code="qaa-x-123456").save()
        returned = self.obj.lang_assigned_map()
        self.assertEquals(len(returned), 2)
        self.assertIn({"qaa-x-abcdef": "qaa-x-abcdef"}, returned)
        self.assertIn({"qaa-x-123456": "qaa-x-123456"}, returned)

    def test_lang_assigned_changed_map(self):
        """ lang_assigned_map should return a list of dictionary of object.code: object.lang_assigned.code """
        l = self.obj.lang_assigned
        l.code = "abc"
        l.save()
        self.assertListEqual(self.obj.lang_assigned_changed_map(), [{"qaa-x-abcdef": "abc"}])

    def test_questions_answers(self):
        tmp = self.obj.questions_and_answers
        self.assertEqual(tmp[0]["id"], 0)
        self.assertEqual(tmp[0]["question"], "What do you call your language?")
        self.assertEqual(tmp[0]["answer"], "wonderful")
        self.assertEqual(tmp[1]["answer"], "")
        self.obj.answers = None
        tmp = self.obj.questions_and_answers
        self.assertEqual(len(tmp), len(self.obj.questionnaire.questions))
        self.assertEqual(tmp[0]["answer"], "")
        self.assertEqual(tmp[1]["answer"], "")
def lang_assignment_changed_json(request):
    return JsonResponse(TempLanguage.lang_assigned_changed_map(), safe=False)
def templanguages_json(request):
    return JsonResponse(TempLanguage.lang_assigned_data(), safe=False)
 def setUp(self):
     obj = TempLanguage(pk=999, code="tst")
     obj.save()
     self.request = RequestFactory().get("/uw/templanguages/")
     self.request.user = create_user()
     self.view = setup_view(TempLanguageDetailView(), self.request)
class TempLanguageTestCase(TestCase):
    def setUp(self):
        self.obj = TempLanguage(code="qaa-x-abcdef", name="Temporary Language")
        self.obj.save()
        self.obj.questionnaire = Questionnaire.objects.create(
            questions=[{
                "id": 0,
                "text": "What do you call your language?",
                "help": "Test help text",
                "required": True,
                "input_type": "string",
                "sort": 1,
                "depends_on": None
            }, {
                "id": 1,
                "text": "Second Question",
                "help": "Test help text",
                "required": True,
                "input_type": "string",
                "sort": 2,
                "depends_on": None
            }])
        self.obj.answers = [{'question_id': 0, 'text': 'wonderful'}]
        self.obj.save()

    def test_string_representation(self):
        """ __str__() should returned the model's code """
        self.assertEquals(str(self.obj), "qaa-x-abcdef")

    def test_get_absolute_url(self):
        """ get_absolute_url should return the URL to the detail page """
        self.assertEquals(
            self.obj.get_absolute_url(),
            reverse("templanguage_detail", args=[str(self.obj.id)]))

    def test_lang_assigned_url_property(self):
        """ lang_assigned_url should return the URL to the detail page of model's lang_assigned related object """
        self.assertEquals(
            self.obj.lang_assigned_url,
            reverse("language_detail", args=[str(self.obj.lang_assigned_id)]))

    def test_name_property(self):
        """ object.name should return its name """
        self.assertEquals(self.obj.name, "Temporary Language")

    def test_pending_method(self):
        """ object.pending should return a list of objects with status 'p' """
        returned = self.obj.pending()
        self.assertEqual(len(returned), 1)
        self.assertIn(self.obj, returned)

    def test_approved_method(self):
        """ object.approved should return a list of objects with status 'a' """
        self.assertEqual(len(self.obj.approved()), 0)
        a = TempLanguage(code="qaa-x-ghijkl", status="a")
        a.save()
        returned = self.obj.approved()
        self.assertEqual(len(returned), 1)
        self.assertIn(a, returned)

    def test_rejected_method(self):
        """ object.rejected should return a list of objects with status 'r' """
        self.assertEqual(len(self.obj.rejected()), 0)
        r = TempLanguage(code="qaa-x-ghijkl", status="r")
        r.save()
        returned = self.obj.rejected()
        self.assertEqual(len(returned), 1)
        self.assertIn(r, returned)

    def test_lang_assigned_map_method(self):
        """ lang_assigned_map should return a list of dictionary of object.code: object.lang_assigned.code """
        self.assertListEqual(self.obj.lang_assigned_map(),
                             [{
                                 "qaa-x-abcdef": "qaa-x-abcdef"
                             }])
        TempLanguage(code="qaa-x-123456").save()
        returned = self.obj.lang_assigned_map()
        self.assertEquals(len(returned), 2)
        self.assertIn({"qaa-x-abcdef": "qaa-x-abcdef"}, returned)
        self.assertIn({"qaa-x-123456": "qaa-x-123456"}, returned)

    def test_lang_assigned_changed_map(self):
        """ lang_assigned_map should return a list of dictionary of object.code: object.lang_assigned.code """
        l = self.obj.lang_assigned
        l.code = "abc"
        l.save()
        self.assertListEqual(self.obj.lang_assigned_changed_map(),
                             [{
                                 "qaa-x-abcdef": "abc"
                             }])

    def test_questions_answers(self):
        tmp = self.obj.questions_and_answers
        self.assertEqual(tmp[0]["id"], 0)
        self.assertEqual(tmp[0]["question"], "What do you call your language?")
        self.assertEqual(tmp[0]["answer"], "wonderful")
        self.assertEqual(tmp[1]["answer"], "")
        self.obj.answers = None
        tmp = self.obj.questions_and_answers
        self.assertEqual(len(tmp), len(self.obj.questionnaire.questions))
        self.assertEqual(tmp[0]["answer"], "")
        self.assertEqual(tmp[1]["answer"], "")
    def post(self, request, *args, **kwargs):
        # First pass only. Will need more validation and refactoring
        data = list()
        answers = list()
        answer_list = list()
        answer_text_list = list()
        obj_list = list()
        try:
            message = ""
            data = request.POST if len(request.POST) else json.loads(
                request.body)
            questionnaire = Questionnaire.objects.get(
                pk=data.get("questionnaire_id"))
            field_mapping = questionnaire.field_mapping
            answers = json.loads(data.get("answers")) if len(
                request.POST) else data.get("answers")

            obj = TempLanguage(code=data.get("temp_code"),
                               questionnaire=questionnaire,
                               app=data.get("app"),
                               request_id=data.get("request_id"),
                               requester=data.get("requester"),
                               answers=answers)

            for answer in answers:
                answer_list.append(answer)
                qid = str(answer.get("question_id"))
                if qid is not None and qid in field_mapping:
                    answer_text = answer.get("text")
                    answer_text_list.append(answer_text)
                    if field_mapping[qid] == "country":
                        obj.country = Country.objects.get(
                            name__iexact=answer_text)
                        obj_list.append(obj.country and obj.country.name)
                    elif field_mapping[qid] == "direction":
                        obj.direction = "l" if answer_text.lower(
                        ) == "yes" else "r"
                        obj_list.append(obj.direction)
                    else:
                        obj.__dict__[field_mapping[qid]] = answer_text
                        obj_list.append(obj.__dict__[field_mapping[qid]])

            obj.save()

        except Questionnaire.DoesNotExist:
            message = "questionnaire_id given does not return a matching Questionnaire object"
        except Country.DoesNotExist:
            message = "The answer for country results in an invalid lookup"
        except Exception as e:
            message = e.message

        return JsonResponse({
            "status": "error" if message else "success",
            "message": message or "Request submitted",
            "debug": {
                "data": data or "no data",
                "answers": answers or "no answers",
                "answer_list": answer_list or "no answer_list",
                "answer_text_list": answer_text_list or "no answer_text_list",
                "obj_list": obj_list or "no obj_list"
            }
        })
def lang_assignment_changed_json(request):
    return JsonResponse(TempLanguage.lang_assigned_changed_map(), safe=False)
def templanguages_json(request):
    return JsonResponse(TempLanguage.lang_assigned_data(), safe=False)