@@ -396,16 +396,28 @@ pub async fn management(
396396
397397 let mut conn = get_connection ( & state) ?;
398398 web_block_unpacked ( move || {
399- match diesel:: update ( chargers:: chargers)
400- . filter ( chargers:: id. eq ( charger_id) )
401- . set ( (
402- chargers:: firmware_version. eq ( fw_version) ,
403- chargers:: webinterface_port. eq ( port as i32 ) ,
404- chargers:: device_type. eq ( device_type) ,
405- chargers:: mtu. eq ( mtu. map ( |m| m as i32 ) ) ,
406- ) )
407- . execute ( & mut conn)
408- {
399+ let result = if let Some ( m) = mtu {
400+ diesel:: update ( chargers:: chargers)
401+ . filter ( chargers:: id. eq ( charger_id) )
402+ . set ( (
403+ chargers:: firmware_version. eq ( fw_version) ,
404+ chargers:: webinterface_port. eq ( port as i32 ) ,
405+ chargers:: device_type. eq ( device_type) ,
406+ chargers:: mtu. eq ( m as i32 ) ,
407+ ) )
408+ . execute ( & mut conn)
409+ } else {
410+ diesel:: update ( chargers:: chargers)
411+ . filter ( chargers:: id. eq ( charger_id) )
412+ . set ( (
413+ chargers:: firmware_version. eq ( fw_version) ,
414+ chargers:: webinterface_port. eq ( port as i32 ) ,
415+ chargers:: device_type. eq ( device_type) ,
416+ ) )
417+ . execute ( & mut conn)
418+ } ;
419+
420+ match result {
409421 Ok ( _) => Ok ( ( ) ) ,
410422 Err ( _err) => {
411423 log:: error!( "Error while updating charger: {_err}" ) ;
@@ -515,6 +527,66 @@ mod tests {
515527 ) ;
516528 }
517529
530+ #[ actix_web:: test]
531+ async fn test_management_with_mtu ( ) {
532+ let ( mut user, mail) = TestUser :: random ( ) . await ;
533+ user. login ( ) . await ;
534+ let charger = user. add_random_charger ( ) . await ;
535+
536+ let app = App :: new ( ) . configure ( configure) . service ( management) ;
537+ let app = test:: init_service ( app) . await ;
538+
539+ let user_id = get_test_uuid ( & mail) . unwrap ( ) ;
540+ let charger_uuid_clone = charger. uuid . clone ( ) ;
541+ let data = ManagementDataVersion :: V2 ( ManagementDataVersion2 {
542+ id : charger. uuid ,
543+ password : charger. password ,
544+ port : 8080 ,
545+ firmware_version : "2.4.0" . to_string ( ) ,
546+ configured_users : vec ! [ ConfiguredUser {
547+ email: None ,
548+ user_id: Some ( user_id. to_string( ) ) ,
549+ name: Some ( String :: new( ) ) ,
550+ } ] ,
551+ mtu : Some ( 1420 ) ,
552+ } ) ;
553+
554+ let body = ManagementSchema {
555+ id : None ,
556+ password : None ,
557+ data,
558+ } ;
559+ let req = test:: TestRequest :: put ( )
560+ . uri ( "/management" )
561+ . append_header ( ( "X-Forwarded-For" , "123.123.123.4" ) )
562+ . append_header ( ( "User-Agent" , "Tinkerforge-WARP3_Charger/2.9.0+abc123" ) )
563+ . set_json ( body)
564+ . to_request ( ) ;
565+ let resp: ManagementResponseSchema = test:: call_and_read_body_json ( & app, req) . await ;
566+
567+ println ! ( "{resp:?}" ) ;
568+ assert_eq ! ( [ 1 ] , * resp. configured_users) ;
569+ assert_eq ! ( vec![ user_id. to_string( ) ] , resp. configured_users_uuids) ;
570+
571+ // Verify MTU, port, firmware_version, and device_type stored correctly
572+ use db_connector:: models:: chargers:: Charger as DbCharger ;
573+ use db_connector:: schema:: chargers:: dsl:: * ;
574+ let pool = db_connector:: test_connection_pool ( ) ;
575+ let mut conn = pool. get ( ) . unwrap ( ) ;
576+ let db_charger: DbCharger = chargers
577+ . filter ( id. eq ( uuid:: Uuid :: from_str ( & charger_uuid_clone) . unwrap ( ) ) )
578+ . select ( DbCharger :: as_select ( ) )
579+ . get_result ( & mut conn)
580+ . unwrap ( ) ;
581+ assert_eq ! ( db_charger. mtu, Some ( 1420 ) ) ;
582+ assert_eq ! ( db_charger. webinterface_port, 8080 ) ;
583+ assert_eq ! ( db_charger. firmware_version, "2.4.0" ) ;
584+ assert_eq ! (
585+ db_charger. device_type. as_deref( ) ,
586+ Some ( "Tinkerforge-WARP3_Charger/2.9.0+abc123" )
587+ ) ;
588+ }
589+
518590 #[ actix_web:: test]
519591 async fn test_management_old_api ( ) {
520592 let ( mut user, mail) = TestUser :: random ( ) . await ;
0 commit comments