@@ -151,15 +151,19 @@ impl<'a> Item<'a> {
151151 /// * `secret` - The secret to store.
152152 #[ doc( alias = "SetSecret" ) ]
153153 pub async fn set_secret ( & self , secret : impl Into < Secret > ) -> Result < ( ) , Error > {
154- let secret = match self . algorithm {
155- Algorithm :: Plain => api:: DBusSecret :: new ( Arc :: clone ( & self . session ) , secret) ,
156- Algorithm :: Encrypted => {
157- let aes_key = self . aes_key . as_ref ( ) . unwrap ( ) ;
158- api:: DBusSecret :: new_encrypted ( Arc :: clone ( & self . session ) , secret, aes_key) ?
159- }
160- } ;
161- self . inner . set_secret ( & secret) . await ?;
162- Ok ( ( ) )
154+ if !self . is_available ( ) . await {
155+ Err ( Error :: Deleted )
156+ } else {
157+ let secret = match self . algorithm {
158+ Algorithm :: Plain => api:: DBusSecret :: new ( Arc :: clone ( & self . session ) , secret) ,
159+ Algorithm :: Encrypted => {
160+ let aes_key = self . aes_key . as_ref ( ) . unwrap ( ) ;
161+ api:: DBusSecret :: new_encrypted ( Arc :: clone ( & self . session ) , secret, aes_key) ?
162+ }
163+ } ;
164+ self . inner . set_secret ( & secret) . await ?;
165+ Ok ( ( ) )
166+ }
163167 }
164168
165169 /// Unlock the item.
@@ -367,4 +371,56 @@ mod tests {
367371
368372 item. delete ( None ) . await . unwrap ( ) ;
369373 }
374+
375+ #[ tokio:: test]
376+ async fn deleted_error ( ) {
377+ let service = Service :: plain ( ) . await . unwrap ( ) ;
378+ let collection = service. default_collection ( ) . await . unwrap ( ) ;
379+
380+ let attributes = HashMap :: from ( [ ( "test" , "deleted-error" ) ] ) ;
381+ let secret = crate :: Secret :: text ( "delete test" ) ;
382+
383+ let item = collection
384+ . create_item ( "Delete Test" , & attributes, secret, true , None )
385+ . await
386+ . unwrap ( ) ;
387+
388+ // Verify item works before deletion
389+ assert ! ( item. label( ) . await . is_ok( ) ) ;
390+
391+ // Delete the item
392+ item. delete ( None ) . await . unwrap ( ) ;
393+
394+ // All operations should now return Error::Deleted
395+ assert ! ( matches!( item. label( ) . await , Err ( super :: Error :: Deleted ) ) ) ;
396+ assert ! ( matches!(
397+ item. set_label( "New" ) . await ,
398+ Err ( super :: Error :: Deleted )
399+ ) ) ;
400+ assert ! ( matches!( item. secret( ) . await , Err ( super :: Error :: Deleted ) ) ) ;
401+ assert ! ( matches!(
402+ item. set_secret( "new secret" ) . await ,
403+ Err ( super :: Error :: Deleted )
404+ ) ) ;
405+ assert ! ( matches!(
406+ item. attributes( ) . await ,
407+ Err ( super :: Error :: Deleted )
408+ ) ) ;
409+ assert ! ( matches!(
410+ item. set_attributes( & attributes) . await ,
411+ Err ( super :: Error :: Deleted )
412+ ) ) ;
413+ assert ! ( matches!( item. created( ) . await , Err ( super :: Error :: Deleted ) ) ) ;
414+ assert ! ( matches!( item. modified( ) . await , Err ( super :: Error :: Deleted ) ) ) ;
415+ assert ! ( matches!( item. is_locked( ) . await , Err ( super :: Error :: Deleted ) ) ) ;
416+ assert ! ( matches!( item. lock( None ) . await , Err ( super :: Error :: Deleted ) ) ) ;
417+ assert ! ( matches!(
418+ item. unlock( None ) . await ,
419+ Err ( super :: Error :: Deleted )
420+ ) ) ;
421+ assert ! ( matches!(
422+ item. delete( None ) . await ,
423+ Err ( super :: Error :: Deleted )
424+ ) ) ;
425+ }
370426}
0 commit comments