@@ -195,6 +195,89 @@ impl TryFrom<&[u8]> for Item {
195195mod tests {
196196 use super :: * ;
197197
198+ #[ tokio:: test]
199+ async fn test_item_set_label ( ) {
200+ let attributes = std:: collections:: HashMap :: from ( [ ( "service" . to_string ( ) , "test-service" ) ] ) ;
201+ let mut item = Item :: new ( "Original Label" , & attributes, Secret :: text ( "secret" ) ) ;
202+
203+ let original_modified = item. modified ( ) ;
204+ tokio:: time:: sleep ( Duration :: from_secs ( 1 ) ) . await ;
205+
206+ item. set_label ( "New Label" ) ;
207+
208+ assert_eq ! ( item. label( ) , "New Label" ) ;
209+ assert ! ( item. modified( ) > original_modified) ;
210+ assert_eq ! ( item. secret( ) . as_bytes( ) , b"secret" ) ;
211+ assert_eq ! ( item. attributes( ) . get( "service" ) . unwrap( ) , "test-service" ) ;
212+ }
213+
214+ #[ tokio:: test]
215+ async fn test_item_set_secret_text ( ) {
216+ let attributes = std:: collections:: HashMap :: from ( [ ( "service" . to_string ( ) , "test-service" ) ] ) ;
217+ let mut item = Item :: new ( "Test Item" , & attributes, Secret :: text ( "original" ) ) ;
218+
219+ let original_modified = item. modified ( ) ;
220+ tokio:: time:: sleep ( Duration :: from_secs ( 1 ) ) . await ;
221+
222+ item. set_secret ( Secret :: text ( "new secret" ) ) ;
223+
224+ assert_eq ! ( item. secret( ) . as_bytes( ) , b"new secret" ) ;
225+ assert ! ( item. modified( ) > original_modified) ;
226+ assert_eq ! ( item. label( ) , "Test Item" ) ;
227+ assert_eq ! ( item. attributes( ) . get( "service" ) . unwrap( ) , "test-service" ) ;
228+ }
229+
230+ #[ tokio:: test]
231+ async fn test_item_set_secret_blob ( ) {
232+ let attributes = std:: collections:: HashMap :: from ( [ ( "type" . to_string ( ) , "binary" ) ] ) ;
233+ let mut item = Item :: new ( "Binary Item" , & attributes, Secret :: blob ( b"binary data" ) ) ;
234+
235+ let original_modified = item. modified ( ) ;
236+ tokio:: time:: sleep ( Duration :: from_secs ( 1 ) ) . await ;
237+
238+ item. set_secret ( Secret :: blob ( b"new binary data" ) ) ;
239+
240+ assert_eq ! ( item. secret( ) . as_bytes( ) , b"new binary data" ) ;
241+ assert ! ( item. modified( ) > original_modified) ;
242+ assert_eq ! ( item. label( ) , "Binary Item" ) ;
243+ }
244+
245+ #[ tokio:: test]
246+ async fn test_item_created_timestamp ( ) {
247+ let attributes = std:: collections:: HashMap :: from ( [ ( "test" . to_string ( ) , "timestamp" ) ] ) ;
248+ let item = Item :: new ( "Timestamp Test" , & attributes, Secret :: text ( "data" ) ) ;
249+
250+ let created_time = item. created ( ) ;
251+ assert ! ( created_time. as_secs( ) > 0 ) ;
252+
253+ let modified_time = item. modified ( ) ;
254+ assert_eq ! ( created_time, modified_time) ;
255+ }
256+
257+ #[ tokio:: test]
258+ async fn test_item_modified_timestamp_updates ( ) {
259+ let attributes = std:: collections:: HashMap :: from ( [ ( "test" . to_string ( ) , "modification" ) ] ) ;
260+ let mut item = Item :: new ( "Modification Test" , & attributes, Secret :: text ( "data" ) ) ;
261+
262+ let original_created = item. created ( ) ;
263+ let original_modified = item. modified ( ) ;
264+
265+ tokio:: time:: sleep ( Duration :: from_secs ( 1 ) ) . await ;
266+
267+ item. set_label ( "Updated Label" ) ;
268+
269+ assert_eq ! ( item. created( ) , original_created) ;
270+ assert ! ( item. modified( ) > original_modified) ;
271+
272+ let mid_modified = item. modified ( ) ;
273+ tokio:: time:: sleep ( Duration :: from_secs ( 1 ) ) . await ;
274+
275+ item. set_secret ( Secret :: text ( "updated secret" ) ) ;
276+
277+ assert_eq ! ( item. created( ) , original_created) ;
278+ assert ! ( item. modified( ) > mid_modified) ;
279+ }
280+
198281 #[ test]
199282 fn test_file_item_serialization ( ) {
200283 let key = Key :: new ( vec ! [
0 commit comments