Ejemplo n.º 1
0
 def test_property(self):
     head1("准备测试property的序列化")
     info("测试用pro")
     data = {}
     serializer1 = serializers.TestPropertySerializer(data=data)
     serializer1.is_valid()
     serializer1.save()
Ejemplo n.º 2
0
    def test_local(self):
        return
        # 别测了. 有bug. 如果你设置user_tz=False, 你就别用timezone参数啊
        head1("\n## 测试使用local是的timezone")
        data = {'time': '2020-06-10T03:45:13.026Z'}  # 当作本地时间的
        serializer = serializers.LocalModelSerializer(data=data)
        import ipdb
        ipdb.set_trace()
        serializer.is_valid(raise_exception=True)
        info(serializer.validated_data)
        return

        for data in [
            {
                'time': '2020-06-10T03:45:13.026Z'
            },  # 正常
            {
                'time': '2020-06-10 03:45:13'
            },  # 没有时区,就是正常的
            {
                'time': '2020-06-10T03:45:13.026+08:00'
            },  # 只有这个会转化
            {
                'time': '2020-06-10T03:45:13.026Z'
            }  # 当作本地时间的
        ]:
            info("输入: ")
            info(data)
            serializer = serializers.LocalModelSerializer(data=data)
            serializer.is_valid(raise_exception=True)
            info(serializer.validated_data)
            instance = serializer.save()
            info("转化")
            info(serializers.LocalModelSerializer(instance).data)
Ejemplo n.º 3
0
    def test_datetime(self):
        head1("\n## 测试DateTimeField")
        list1("* 准备测试datetime field")
        data = {'time': timezone.now(), 'duration': 3600.1}
        serializer = serializers.DateTimeModelSerializer(data=data)
        serializer.is_valid(raise_exception=True)
        info("datetime的对象可以直接当作data传进去")

        data = {'time': timezone.now().isoformat(), 'duration': 3600.1}
        serializer = serializers.DateTimeModelSerializer(data=data)
        serializer.is_valid(raise_exception=True)
        info("datetime的国际化时间可以直接传进去")

        list1("* 准备测试input_formats")
        data = {"time": "2019-01-01", "duration": 3600.1}
        serializer = serializers.DateTimeModelSerializer(data=data)
        serializer.is_valid(raise_exception=True)
        info(serializer.validated_data)
        data = {"time": "2019年1月1日", "duration": 3600.1}
        serializer = serializers.DateTimeModelSerializer(data=data)
        serializer.is_valid(raise_exception=True)
        info(serializer.validated_data)
        info("可以输入日期格式, 会自动变成local的00点00分00秒")

        list1("* 准备测试duration field")
        info("duration可以直接传入一个小数,代表多少秒")
        serializer.save()
        info(serializer.data)
        data = {'time': timezone.now(), 'duration': "11 001:2:3.5"}
        serializer2 = serializers.DateTimeModelSerializer(data=data)
        serializer2.is_valid(raise_exception=True)
        serializer2.save()
        info("也可以传入符合格式的字符串(前面多写或者少写几个0没关系")
        info(serializer2.data)
Ejemplo n.º 4
0
 def test_extra2(self):
     head1("## 测试如果meta里面多了不是model的字段怎么办")
     info("当前的text数量: {}".format(BasicModel.objects.count()))
     instance = BasicModel.objects.create()
     serializer = serializers.TestExtraFieldSerializer(instance,
                                                       data={
                                                           "text": "text",
                                                           "num": 123
                                                       })
     serializer.is_valid(raise_exception=True)
     serializer.save()
     info(serializer.data)  # 会直接返回num
     info("现在的text数量: {}".format(BasicModel.objects.count()))
     head1("## 那么如果覆盖了save函数怎么办")
     info("会报错,因为save已经被覆盖了,所以之后调用save()会报错")
     serializer = serializers.TestOverWriteSaveSerializer(
         instance, data={
             "text": "text_oversave",
             "num": 123,
             "save": 343
         })
     serializer.is_valid(raise_exception=True)
     # import ipdb
     # ipdb.set_trace()
     # serializer.save()
     info(serializer.data)
Ejemplo n.º 5
0
 def test_user_modal(self):
     head1("## 准备测试用户model")
     list1("* 测试model的fields username")
     user = User.objects.create()
     info("直接创建用户成功")
     info("用户的username为空字符串")
     self.assertEqual(user.username, "")
Ejemplo n.º 6
0
 def test_multichoice_filter(self):
     head("# 准备测试multichoice filter")
     head1("## 过滤CharField")
     models.TestFilter.objects.create(_type="类型1")
     fenlei1 = models.BasicModel.objects.create(text="分类1")
     fenlei2 = models.BasicModel.objects.create(text="分类2")
     fenlei3 = models.BasicModel.objects.create(text="分类3")
     instance1 = models.TestFilter.objects.create(_type="类型1")
     instance2 = models.TestFilter.objects.create(_type="类型2")
     instance3 = models.TestFilter.objects.create(_type="类型3")
     instance1.basic_model.add(fenlei1)
     instance2.basic_model.add(fenlei2)
     instance3.basic_model.add(fenlei3)
     client = Client()
     info("找到类型1和类型2的")
     response = client.get("/testapp/testfilter/?_type=类型1&_type=类型2",
                           headers={"accept": "application/json"})
     info(response.data)
     head1("## 过滤ManyToManyField")
     response = client.get(
         "/testapp/testfilter/?basic_model=1&basic_model=2",
         headers={"accept": "application/json"})
     info(response.data)
     response = client.get(
         "/testapp/testfilter/?basic_model=1&basic_model=3",
         headers={"accept": "application/json"})
     info(response.data)
Ejemplo n.º 7
0
 def test_auth_views(self):
     head1("## 准备测试使用auth的view进行登录")
     client = APIClient()
     response = client.post(
         "/account/login/",
         data={
             "username": "******",
             "password": "******"
         },
         format="json",
     )
     self.assertEqual(
         Token.objects.get(key=response.json()["token"]).user, self.user1)
     self.assertIsNotNone(response.cookies.get('sessionid'))
     self.assertIsInstance(response.json()["token"], str)
     response = client.post(
         "/account/login/",
         data={
             "username": "******",
             "password": "******"
         },
         format="json",
     )
     self.assertEqual(
         Token.objects.get(key=response.json()["token"]).user, self.user2)
Ejemplo n.º 8
0
 def test_null(self):
     head1("## 测试Null")
     data_list = [
         {},
         {
             "can": ""
         },
         {
             "can": "can"
         },  # 有null为null,有blank为""
         {
             "can": "can",
             "can_null": None
         },
         {
             "can": "can",
             "can_null": ""
         },
         {
             "can": "can",
             "can_blank": None
         },
         {
             "can": "can",
             "can_default": ""
         },
     ]
     for data in data_list:
         serializer = serializers.TestNullSerializer(data=data)
         print("准备处理: %s" % data)
         if serializer.is_valid(raise_exception=False):
             serializer.save()
             out.write(style.SUCCESS(serializer.data))
         else:
             out.write(style.ERROR(serializer.errors))
Ejemplo n.º 9
0
 def test_onetoone_field(self):
     head1("\n## 测试OneToOneField")
     text = models.BasicModel.objects.create(text="text")
     onetoone = models.TestOneToOneField.objects.create(text=text)
     text.delete()
     # CASCADE null=False|True, 此时可以用text.testonetoonefield 但是调用 text.testonetoonefield.refresh_from_db 就会报错
     out.write(style.HTTP_INFO("text已经删除"))
     out.write(style.HTTP_INFO(models.TestOneToOneField.objects.all()))
Ejemplo n.º 10
0
 def test_decimal(self):
     head1("# 准备测试decimal这个field")
     list1("* 测试基础的maxj_digits, decimal_palces超出会怎么样")
     data = {"deci": "0.333"}
     s = TestDecimalSerializer(data=data)
     s.is_valid()
     info(s.errors)
     info("如果数字数量超出了,会报错, 就算小数位数只有1分,整数部分仍然不能多一位, 反之整数部分小了,小数部分也不能变多")
     info("默认不能传入空字符串和None")
Ejemplo n.º 11
0
 def test_path(self):
     head1("\n## 测试使用path")
     list1("* 测试如果是int的converter遇到")
     client = Client()
     info("使用负数传入就不支持了")
     response = client.get("/testapp/testint/1/")
     self.assertEqual(response.resolver_match.kwargs, {"pk": 1})
     response = client.get("/testapp/testint/-1/")
     self.assertEqual(response.status_code, 200)
Ejemplo n.º 12
0
 def test_template(self):
     head1("\n## 测试模板")
     list1("* 测试不同的url,的参数的传递")
     client = Client()
     info("通过request.resolver_match.kwargs可以获取到url里面额外的参数")
     response = client.get("/testapp/url/")
     self.assertEqual(response.template_name, ["testapp/测试模板.html"])
     info("根据这个参数来判断要使用admin的template还是普通的template")
     response2 = client.get("/testapp/url2/")
     self.assertEqual(response2.template_name, ["testapp/测试模板_admin.html"])
Ejemplo n.º 13
0
 def test_method(self):
     head1("## 准备测试method里面的数据")
     list1("* 测试如果SerializerMethodField不返回数据会怎么样")
     data = {"text": 'text'}
     s = serializers.TestMethodSerializer(data=data)
     s.is_valid()
     s.save()
     out.write(style.HTTP_INFO(s.data))
     out.write(style.ERROR(s.errors))
     return
Ejemplo n.º 14
0
 def test_cache_control(self):
     head1("## 准备测试cache_control")
     info("不可以使用cache_control来缓存函数")
     start = time.time()
     service.slow_function(3)
     end = time.time()
     info("第一次执行`slow_function`的时间: {}".format(end - start))
     start = time.time()
     service.slow_function(3)
     end = time.time()
     info("第二次执行`slow_function`的时间: {}".format(end - start))
Ejemplo n.º 15
0
 def setUp(self):
     head1("## 准备测试时间的过滤和排序")
     self.test_date_list = [
         "2018-05-20T23:59:59+08:00",  # 2018-05-20T15:59:59+00:00"
         "2018-05-21T00:00:00+08:00",  # 2018-05-20T16:00:00+00:00"
         "2018-05-21T23:59:59+08:00",  # 2018-05-21T15:59:59+00:00
         "2018-05-22T00:00:00+08:00",  # 2018-05-21T16:00:00+00:00
         "2018-05-22T00:00:00+00:00",  # 2018-05-22T00:00:00+00:00
         "2018-05-22T23:00:00+08:00",  # 2018-05-22T15:00:00+00:00
     ]
     for date in self.test_date_list:
         datetime_obj = DateTimeModel.objects.create(time=date)
         info(datetime_obj)
Ejemplo n.º 16
0
 def test_viewset_post(self):
     head("# 准备测试ViewSet的post请求")
     head1("## 看看post调用的是create还是post")
     info("如果是post请求,调用的是create函数")
     response = client.post(
         "/testapp/testfilter/?format=json",
         headers={"accept": "application/json"},
         json={
             "_type": "类型1"
         }
     )
     info(f"服务器返回的状态码: {response.status_code}")
     info(f"服务器返回的状态码: {response.content.decode('UTF-8')}")
Ejemplo n.º 17
0
 def test_auth_views(self):
     head1("## 准备测试使用auth的view进行登录")
     client = Client()
     response = client.post(
         "/api-auth/login/",
         data={
             "username": "******",
             "password": "******"
         },
         header={"content-type": "application/json; charset=utf-8"})
     self.assertIsNotNone(response.cookies.get('sessionid'))
     response = client.get("/testapp/movie/")
     self.assertEqual(response.context['user'], self.user)
     response = client.get("/api-auth/logout/", )
     self.assertFalse(response.context['user'].is_authenticated)
Ejemplo n.º 18
0
 def test_many(self):
     head1("## 准备测试多对多")
     list1("* 有数据后批量创建")
     BasicModel.objects.create(text='1')
     BasicModel.objects.create(text='2')
     a = serializers.ManySerializer(data={'texts': ['1', '3']})
     a.is_valid(raise_exception=True)
     # a.save(texts=[])
     a.save()
     success("保存成功")
     info(a.instance.texts.all())
     success("保存后,如果这个text对应id的basicmodel存在,就会添加")
     BasicModel.objects.create(text='text')
     a.instance.texts.add(*BasicModel.objects.all())
     # print(serializers.ManyDetailSerializer(a.instance).data)
     list1("* 准备测试空数组的多对多")
     b = serializers.ManySerializer(data={'texts': []})
     b.is_valid(raise_exception=True)
     b.save()
     info("保存成功")
Ejemplo n.º 19
0
 def test_datetimefield_filter_date(self):
     head1("### 准备测试通过`_date`来过滤时间")
     list1("* 普通时间直接过滤2018-05-21")
     queryset = DateTimeModel.objects.filter(time__date="2018-05-21")
     for instance in queryset:
         info(instance)
     info("返回了当前时区下时间为2018-05-21的时间")
     # new_date = timezone.now() - timezone.timedelta(0, 12*3600)
     new_date = timezone.datetime(2018, 5, 21, 23, 0, 0, 0, timezone.utc)
     info(new_date)
     list2("* utc时间下2018-05-21 23:00:00.date过滤")
     date = new_date.date()
     info(date)
     queryset2 = DateTimeModel.objects.filter(time__date=new_date.date())
     for instance in queryset2:
         info(instance)
     list2("* utc时间下2018-05-21 23:00:00用时间直接过滤")
     queryset3 = DateTimeModel.objects.filter(time__date=new_date)
     for instance in queryset3:
         info(instance)
     info("直接输入时间,会先把先把时间转化成本地时区,然后再过滤")
     list2("* 当地时区下过滤")
Ejemplo n.º 20
0
 def test_manytomany_field(self):
     head1("\n## 测试ManyToManyField")
     list1("* 如果symmetrical=True默认")
     student = Student.objects.create(name="George")
     student2 = Student.objects.create(name="Li Lei")
     student3 = Student.objects.create(name="Han Mei")
     student2.friends.add(student)
     student2.friends.add(student3)
     student3.friends.add(student2)
     print("student2的好友有:", end=" ")
     print(student2.friends.all())
     print("认为我是好友的有(只能是一样的):", end=" ")
     # print(student2.student_set.all()) 这个会报错
     print(student2.friends.all())
     list1("* 如果symmetrical=False")
     teacher = Teacher.objects.create(name="王主任")
     teacher2 = Teacher.objects.create(name="小李主任")
     teacher3 = Teacher.objects.create(name="小红主任")
     teacher2.teachers.add(teacher)
     teacher2.teachers.add(teacher3)
     teacher3.teachers.add(teacher)
     print("给teacher3指导过的有:", end=" ")
     print(teacher3.teachers.all())
     print("teacher3指导过的人有:", end=" ")
     # import ipdb
     # ipdb.set_trace()
     print(teacher3.teacher_set.all())
     list1("* 检查是否存在")
     new_student = Student.objects.create(name="New Student")
     print("现在new_student的friends里面有没有George", student
           in new_student.friends.all())
     result = new_student.friends.add(student)
     print("add以后现在new_student的friends里面有没有George", student
           in new_student.friends.all())
     print("但是add的return: ", result)
     head1("ManyToManyField测试完毕")
Ejemplo n.º 21
0
 def test_default(self):
     head1("## 测试如果有default会得到什么结果")
     for i in [
         {},
         {
             "text": ""
         },
         {
             "text": "  "
         },
         {
             "text": None
         },
         {
             "text": "123"
         },
     ]:
         serializer = serializers.TestDefaultSerializer(data=i)
         info("i= {}".format(i))
         if serializer.is_valid():
             info("serializer.validated_data: {}".format(
                 serializer.validated_data))
         else:
             info("不合法")
Ejemplo n.º 22
0
 def test_datetime_field(self):
     head1("\n## 测试和时间有关的Field")
     list1("* 测试DurationField")
     datetime_obj = models.DateTimeModel.objects.create(time=timezone.now())
     info(isinstance(datetime_obj.duration, timedelta))
Ejemplo n.º 23
0
 def test_datetimefield_order(self):
     head1("### 准备测试时间的排序")
Ejemplo n.º 24
0
 def test_viewset_permission(self):
     head("# 准备测试ViewSet的permission")
     head1("## 看看detail的请求时候,permission里面有没有action")
     obj = models.BasicModel.objects.create(text="类型1")
     res = apiclient.get(
         "/testapp/modelviewset/{}/".format(obj.id), format="json")
Ejemplo n.º 25
0
 def test_request_data(self):
     head1("准备测试request.data")
     list1("* 测试request.data类型,是否可变")
     client = Client()
     response = client.post("/testapp/basicmodel/", {"text": "text"})
Ejemplo n.º 26
0
 def test_paginator(self):
     head1("## 准备测试paginator的函数")
     res = apiclient.get("/testapp/paginator/", format="json")