11// Copyright (C) Dmitry Yakimenko (detunized@gmail.com).
22// Licensed under the terms of the MIT license. See LICENCE for details.
33
4+ using System ;
45using Newtonsoft . Json ;
6+ using PasswordManagerAccess . OnePassword ;
57using Xunit ;
68using R = PasswordManagerAccess . OnePassword . Response ;
79
@@ -18,5 +20,102 @@ public void VaultItemDetails_parses_with_all_types_of_fields()
1820 Assert . Equal ( 6 , details . Sections [ 0 ] . Fields . Length ) ;
1921 Assert . Equal ( 6 , details . Sections [ 1 ] . Fields . Length ) ;
2022 }
23+
24+ [ Fact ]
25+ public void VaultItem_parses_createdAt_and_updatedAt ( )
26+ {
27+ var json = GetFixture ( "get-vault-item-response" ) ;
28+ var response = JsonConvert . DeserializeObject < R . SingleVaultItem > ( json ) ;
29+ Assert . Equal ( "2016-08-04T13:15:10Z" , response . Item . CreatedAt ) ;
30+ Assert . Equal ( "2016-08-04T13:16:07Z" , response . Item . UpdatedAt ) ;
31+ }
32+
33+ [ Fact ]
34+ public void VaultItem_handles_missing_createdAt_and_updatedAt ( )
35+ {
36+ var json = @"{
37+ ""uuid"": ""test-id"",
38+ ""templateUuid"": ""001"",
39+ ""trashed"": ""N"",
40+ ""itemVersion"": 1,
41+ ""encryptedBy"": ""test-key"",
42+ ""encOverview"": {
43+ ""kid"": ""test-key"",
44+ ""enc"": ""A256GCM"",
45+ ""cty"": ""b5+jwk+json"",
46+ ""iv"": ""test-iv"",
47+ ""data"": ""test-data""
48+ },
49+ ""encDetails"": {
50+ ""kid"": ""test-key"",
51+ ""enc"": ""A256GCM"",
52+ ""cty"": ""b5+jwk+json"",
53+ ""iv"": ""test-iv"",
54+ ""data"": ""test-data""
55+ }
56+ }" ;
57+ var item = JsonConvert . DeserializeObject < R . VaultItem > ( json ) ;
58+ Assert . Null ( item . CreatedAt ) ;
59+ Assert . Null ( item . UpdatedAt ) ;
60+ }
61+
62+ [ Fact ]
63+ public void VaultItem_handles_invalid_createdAt_and_updatedAt ( )
64+ {
65+ var json = @"{
66+ ""uuid"": ""test-id"",
67+ ""templateUuid"": ""001"",
68+ ""trashed"": ""N"",
69+ ""createdAt"": ""not-a-date"",
70+ ""updatedAt"": ""also-not-a-date"",
71+ ""itemVersion"": 1,
72+ ""encryptedBy"": ""test-key"",
73+ ""encOverview"": {
74+ ""kid"": ""test-key"",
75+ ""enc"": ""A256GCM"",
76+ ""cty"": ""b5+jwk+json"",
77+ ""iv"": ""test-iv"",
78+ ""data"": ""test-data""
79+ },
80+ ""encDetails"": {
81+ ""kid"": ""test-key"",
82+ ""enc"": ""A256GCM"",
83+ ""cty"": ""b5+jwk+json"",
84+ ""iv"": ""test-iv"",
85+ ""data"": ""test-data""
86+ }
87+ }" ;
88+ var item = JsonConvert . DeserializeObject < R . VaultItem > ( json ) ;
89+ Assert . Equal ( "not-a-date" , item . CreatedAt ) ;
90+ Assert . Equal ( "also-not-a-date" , item . UpdatedAt ) ;
91+ }
92+
93+ [ Fact ]
94+ public void VaultItem_ParseDateTime_parses_valid_date ( )
95+ {
96+ var result = VaultItem . ParseDateTime ( "2016-08-04T13:15:10Z" ) ;
97+ Assert . Equal ( new DateTime ( 2016 , 8 , 4 , 13 , 15 , 10 , DateTimeKind . Utc ) , result ) ;
98+ }
99+
100+ [ Fact ]
101+ public void VaultItem_ParseDateTime_returns_default_for_null ( )
102+ {
103+ var result = VaultItem . ParseDateTime ( null ) ;
104+ Assert . Equal ( default ( DateTime ) , result ) ;
105+ }
106+
107+ [ Fact ]
108+ public void VaultItem_ParseDateTime_returns_default_for_empty ( )
109+ {
110+ var result = VaultItem . ParseDateTime ( "" ) ;
111+ Assert . Equal ( default ( DateTime ) , result ) ;
112+ }
113+
114+ [ Fact ]
115+ public void VaultItem_ParseDateTime_returns_default_for_invalid ( )
116+ {
117+ var result = VaultItem . ParseDateTime ( "not-a-date" ) ;
118+ Assert . Equal ( default ( DateTime ) , result ) ;
119+ }
21120 }
22121}
0 commit comments