@@ -1371,3 +1371,138 @@ def test_string_foreign_keys_should_be_url_encoded_so_foreign_pk(self):
1371
1371
],
1372
1372
},
1373
1373
)
1374
+
1375
+ def test_datetime_should_also_serialize_dates_and_times (self ):
1376
+ serializer = JsonApiSerializer (self .datasource , Projection ("all_types_pk" , "datetime" ))
1377
+ record = {
1378
+ "all_types_pk" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1379
+ "datetime" : date (2023 , 10 , 10 ),
1380
+ }
1381
+ # date
1382
+ dumped = serializer .serialize (record , self .collection_all_types )
1383
+ self .assertEqual (
1384
+ dumped ,
1385
+ {
1386
+ "data" : {
1387
+ "type" : "AllTypes" ,
1388
+ "id" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1389
+ "attributes" : {
1390
+ "all_types_pk" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1391
+ "datetime" : "2023-10-10" ,
1392
+ },
1393
+ "links" : {"self" : "/forest/AllTypes/c578ccd6-3dd0-4315-87f3-e200d80dd6f9" },
1394
+ },
1395
+ "links" : {"self" : "/forest/AllTypes/c578ccd6-3dd0-4315-87f3-e200d80dd6f9" },
1396
+ },
1397
+ )
1398
+ # time
1399
+ record = {
1400
+ "all_types_pk" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1401
+ "datetime" : time (12 , 12 , 12 ),
1402
+ }
1403
+ dumped = serializer .serialize (record , self .collection_all_types )
1404
+ self .assertEqual (
1405
+ dumped ,
1406
+ {
1407
+ "data" : {
1408
+ "type" : "AllTypes" ,
1409
+ "id" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1410
+ "attributes" : {
1411
+ "all_types_pk" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1412
+ "datetime" : "12:12:12" ,
1413
+ },
1414
+ "links" : {"self" : "/forest/AllTypes/c578ccd6-3dd0-4315-87f3-e200d80dd6f9" },
1415
+ },
1416
+ "links" : {"self" : "/forest/AllTypes/c578ccd6-3dd0-4315-87f3-e200d80dd6f9" },
1417
+ },
1418
+ )
1419
+
1420
+ def test_date_should_also_serialize_datetimes_and_times (self ):
1421
+ serializer = JsonApiSerializer (self .datasource , Projection ("all_types_pk" , "dateonly" ))
1422
+ record = {
1423
+ "all_types_pk" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1424
+ "dateonly" : datetime (2023 , 10 , 10 , 12 , 12 , 12 ),
1425
+ }
1426
+ # datetime
1427
+ dumped = serializer .serialize (record , self .collection_all_types )
1428
+ self .assertEqual (
1429
+ dumped ,
1430
+ {
1431
+ "data" : {
1432
+ "type" : "AllTypes" ,
1433
+ "id" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1434
+ "attributes" : {
1435
+ "all_types_pk" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1436
+ "dateonly" : "2023-10-10T12:12:12" ,
1437
+ },
1438
+ "links" : {"self" : "/forest/AllTypes/c578ccd6-3dd0-4315-87f3-e200d80dd6f9" },
1439
+ },
1440
+ "links" : {"self" : "/forest/AllTypes/c578ccd6-3dd0-4315-87f3-e200d80dd6f9" },
1441
+ },
1442
+ )
1443
+ # time
1444
+ record = {
1445
+ "all_types_pk" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1446
+ "dateonly" : time (12 , 12 , 12 ),
1447
+ }
1448
+ dumped = serializer .serialize (record , self .collection_all_types )
1449
+ self .assertEqual (
1450
+ dumped ,
1451
+ {
1452
+ "data" : {
1453
+ "type" : "AllTypes" ,
1454
+ "id" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1455
+ "attributes" : {
1456
+ "all_types_pk" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1457
+ "dateonly" : "12:12:12" ,
1458
+ },
1459
+ "links" : {"self" : "/forest/AllTypes/c578ccd6-3dd0-4315-87f3-e200d80dd6f9" },
1460
+ },
1461
+ "links" : {"self" : "/forest/AllTypes/c578ccd6-3dd0-4315-87f3-e200d80dd6f9" },
1462
+ },
1463
+ )
1464
+
1465
+ def test_time_only_should_also_serialize_dates_and_datetimes (self ):
1466
+ serializer = JsonApiSerializer (self .datasource , Projection ("all_types_pk" , "time_only" ))
1467
+ record = {
1468
+ "all_types_pk" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1469
+ "time_only" : datetime (2023 , 10 , 10 , 12 , 12 , 12 ),
1470
+ }
1471
+ # datetime
1472
+ dumped = serializer .serialize (record , self .collection_all_types )
1473
+ self .assertEqual (
1474
+ dumped ,
1475
+ {
1476
+ "data" : {
1477
+ "type" : "AllTypes" ,
1478
+ "id" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1479
+ "attributes" : {
1480
+ "all_types_pk" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1481
+ "time_only" : "2023-10-10T12:12:12" ,
1482
+ },
1483
+ "links" : {"self" : "/forest/AllTypes/c578ccd6-3dd0-4315-87f3-e200d80dd6f9" },
1484
+ },
1485
+ "links" : {"self" : "/forest/AllTypes/c578ccd6-3dd0-4315-87f3-e200d80dd6f9" },
1486
+ },
1487
+ )
1488
+ # date
1489
+ record = {
1490
+ "all_types_pk" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1491
+ "time_only" : date (2023 , 10 , 10 ),
1492
+ }
1493
+ dumped = serializer .serialize (record , self .collection_all_types )
1494
+ self .assertEqual (
1495
+ dumped ,
1496
+ {
1497
+ "data" : {
1498
+ "type" : "AllTypes" ,
1499
+ "id" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1500
+ "attributes" : {
1501
+ "all_types_pk" : "c578ccd6-3dd0-4315-87f3-e200d80dd6f9" ,
1502
+ "time_only" : "2023-10-10" ,
1503
+ },
1504
+ "links" : {"self" : "/forest/AllTypes/c578ccd6-3dd0-4315-87f3-e200d80dd6f9" },
1505
+ },
1506
+ "links" : {"self" : "/forest/AllTypes/c578ccd6-3dd0-4315-87f3-e200d80dd6f9" },
1507
+ },
1508
+ )
0 commit comments