2021-06-01 20:50:23 -04:00
#[ cfg(feature = " robocraft " ) ]
2021-04-11 21:57:50 -04:00
use libfj ::robocraft ;
2021-06-01 20:50:23 -04:00
#[ cfg(feature = " robocraft " ) ]
2022-10-18 19:11:14 -04:00
use libfj ::robocraft2 ;
#[ cfg(feature = " robocraft " ) ]
2021-05-04 22:49:13 -04:00
use std ::convert ::From ;
2021-04-11 21:57:50 -04:00
2021-06-01 20:50:23 -04:00
#[ cfg(feature = " robocraft " ) ]
2021-04-11 21:57:50 -04:00
#[ test ]
fn robocraft_factory_api_init ( ) -> Result < ( ) , ( ) > {
robocraft ::FactoryAPI ::new ( ) ;
Ok ( ( ) )
}
2021-06-01 20:50:23 -04:00
#[ cfg(feature = " robocraft " ) ]
2021-04-11 21:57:50 -04:00
#[ tokio::test ]
async fn robocraft_factory_default_query ( ) -> Result < ( ) , ( ) > {
let api = robocraft ::FactoryAPI ::new ( ) ;
let result = api . list ( ) . await ;
assert! ( result . is_ok ( ) ) ;
let robo_info = result . unwrap ( ) ;
assert_ne! ( robo_info . response . roboshop_items . len ( ) , 0 ) ;
assert_eq! ( robo_info . status_code , 200 ) ;
for robot in & robo_info . response . roboshop_items {
assert_ne! ( robot . item_name , " " ) ;
assert_ne! ( robot . added_by , " " ) ;
assert_ne! ( robot . added_by_display_name , " " ) ;
assert_ne! ( robot . thumbnail , " " ) ;
println! ( " FactoryRobotListInfo.to_string() -> ` {} ` " , robot . to_string ( ) ) ;
}
Ok ( ( ) )
}
2021-06-01 20:50:23 -04:00
#[ cfg(feature = " robocraft " ) ]
2021-04-11 21:57:50 -04:00
fn builder ( ) -> robocraft ::FactorySearchBuilder {
robocraft ::FactoryAPI ::new ( ) . list_builder ( )
}
2021-06-01 20:50:23 -04:00
#[ cfg(feature = " robocraft " ) ]
2021-04-18 19:33:20 -04:00
fn assert_factory_list ( robo_info : robocraft ::FactoryInfo < robocraft ::RoboShopItemsInfo > ) -> Result < ( ) , ( ) > {
2021-04-11 21:57:50 -04:00
assert_ne! ( robo_info . response . roboshop_items . len ( ) , 0 ) ;
assert_eq! ( robo_info . status_code , 200 ) ;
for robot in & robo_info . response . roboshop_items {
assert_ne! ( robot . item_name , " " ) ;
assert_ne! ( robot . added_by , " " ) ;
assert_ne! ( robot . added_by_display_name , " " ) ;
assert_ne! ( robot . thumbnail , " " ) ;
println! ( " FactoryRobotListInfo.to_string() -> ` {} ` " , robot . to_string ( ) ) ;
}
Ok ( ( ) )
}
2021-06-01 20:50:23 -04:00
#[ cfg(feature = " robocraft " ) ]
2021-04-11 21:57:50 -04:00
#[ tokio::test ]
async fn robocraft_factory_custom_query ( ) -> Result < ( ) , ( ) > {
let api = robocraft ::FactoryAPI ::new ( ) ;
let result = api . list_builder ( )
. movement_or ( robocraft ::FactoryMovementType ::Wheels )
. weapon_or ( robocraft ::FactoryWeaponType ::Laser )
. page ( 2 )
. items_per_page ( 10 )
. send ( ) . await ;
assert! ( result . is_ok ( ) ) ;
let robo_info = result . unwrap ( ) ;
assert_ne! ( robo_info . response . roboshop_items . len ( ) , 0 ) ;
//assert_eq!(robo_info.response.roboshop_items.len(), 16); the API behaviour is weird, I swear it's not me!
assert! ( robo_info . response . roboshop_items . len ( ) > = 10 ) ;
assert_eq! ( robo_info . status_code , 200 ) ;
for robot in & robo_info . response . roboshop_items {
assert_ne! ( robot . item_name , " " ) ;
assert_ne! ( robot . added_by , " " ) ;
assert_ne! ( robot . added_by_display_name , " " ) ;
assert_ne! ( robot . thumbnail , " " ) ;
println! ( " FactoryRobotListInfo.to_string() -> ` {} ` " , robot . to_string ( ) ) ;
}
Ok ( ( ) )
}
2021-06-01 20:50:23 -04:00
#[ cfg(feature = " robocraft " ) ]
2021-04-11 21:57:50 -04:00
#[ tokio::test ]
async fn robocraft_factory_player_query ( ) -> Result < ( ) , ( ) > {
let result = builder ( )
2021-07-28 16:27:38 -04:00
. text ( " Spacecam " . to_string ( ) ) // there is a featured robot by this user, so this should never fail
2021-04-11 21:57:50 -04:00
. text_search_type ( robocraft ::FactoryTextSearchType ::Player )
. items_per_page ( 10 )
. send ( ) . await ;
assert! ( result . is_ok ( ) ) ;
assert_factory_list ( result . unwrap ( ) )
}
2021-04-18 19:33:20 -04:00
2021-06-01 20:50:23 -04:00
#[ cfg(feature = " robocraft " ) ]
2021-04-18 19:33:20 -04:00
#[ tokio::test ]
async fn robocraft_factory_robot_query ( ) -> Result < ( ) , ( ) > {
let api = robocraft ::FactoryAPI ::new ( ) ;
2021-05-04 22:49:13 -04:00
let result = api . get ( 6478345 /* featured robot id */ ) . await ;
2021-04-18 19:33:20 -04:00
assert! ( result . is_ok ( ) ) ;
let bot_info = result . unwrap ( ) ;
assert_ne! ( bot_info . response . item_name , " " ) ;
assert_eq! ( bot_info . response . item_id , 6478345 ) ;
assert_ne! ( bot_info . response . cube_data , " " ) ;
assert_ne! ( bot_info . response . colour_data , " " ) ;
Ok ( ( ) )
}
2021-05-04 22:49:13 -04:00
2021-06-01 20:50:23 -04:00
#[ cfg(feature = " robocraft " ) ]
2021-05-04 22:49:13 -04:00
#[ tokio::test ]
async fn robocraft_factory_robot_cubes ( ) -> Result < ( ) , ( ) > {
let api = robocraft ::FactoryAPI ::new ( ) ;
let result = api . get ( 6478345 /* featured robot id */ ) . await ;
assert! ( result . is_ok ( ) ) ;
let bot_info = result . unwrap ( ) ;
let cubes = robocraft ::Cubes ::from ( bot_info . clone ( ) ) ;
println! ( " cube count: {} or {} " , cubes . provided_len , cubes . len ( ) ) ;
/* for c in cubes.into_iter() {
println! ( " Cube.to_string() -> ` {} ` " , c . to_string ( ) ) ;
} * /
let ( cube_d , colour_d ) = cubes . dump ( ) ;
let cube_str = base64 ::encode ( & cube_d ) ;
let colour_str = base64 ::encode ( & colour_d ) ;
assert_eq! ( cube_str , bot_info . response . cube_data ) ;
assert_eq! ( colour_str , bot_info . response . colour_data ) ;
Ok ( ( ) )
}
2022-10-20 19:11:28 -04:00
#[ cfg(feature = " robocraft2 " ) ]
//#[tokio::test]
async fn robocraft2_factory_default_query ( ) -> Result < ( ) , ( ) > {
let api = robocraft2 ::FactoryAPI ::with_auth ( Box ::new ( robocraft2 ::PortalTokenProvider ::with_username ( " FJAPIC00L " , " P4$$w0rd " ) . await . unwrap ( ) ) ) ;
let result = api . list ( ) . await ;
assert! ( result . is_ok ( ) ) ;
let robo_info = unwrap_factory2 ( result ) ;
assert_ne! ( robo_info . results . len ( ) , 0 ) ;
for robot in & robo_info . results {
assert_ne! ( robot . robot . name , " " ) ;
assert_ne! ( robot . robot . creator_id , " " ) ;
assert_ne! ( robot . robot . creator_id , " " ) ;
assert_ne! ( robot . robot . image , " " ) ;
//println!("RobotInfo.to_string() -> `{}`", robot.robot.to_string());
println! ( " SearchResponseItem {} " , serde_json ::to_string_pretty ( & robot ) . unwrap ( ) ) ;
}
Ok ( ( ) )
}
#[ cfg(feature = " robocraft2 " ) ]
#[ tokio::test ]
async fn robocraft2_factory_info ( ) -> Result < ( ) , ( ) > {
let api = robocraft2 ::FactoryAPI ::with_auth ( Box ::new ( robocraft2 ::PortalTokenProvider ::with_username ( " FJAPIC00L " , " P4$$w0rd " ) . await . unwrap ( ) ) ) ;
let result = api . factory_info ( ) . await ;
assert! ( result . is_ok ( ) ) ;
let crf_info = unwrap_factory2 ( result ) ;
println! ( " FactoryInfo {:?} " , crf_info ) ;
Ok ( ( ) )
}
#[ cfg(feature = " robocraft2 " ) ]
//#[tokio::test]
async fn robocraft2_factory_upload ( ) -> Result < ( ) , ( ) > {
let api = robocraft2 ::FactoryAPI ::with_auth ( Box ::new ( robocraft2 ::PortalTokenProvider ::with_username ( " FJAPIC00L " , " P4$$w0rd " ) . await . unwrap ( ) ) ) ;
// copy default bot
let result = api . get ( " 08dab2c9-7a72-4ec4-843c-154fe8768e91 " . to_owned ( ) ) . await ;
assert! ( result . is_ok ( ) ) ;
let robot = unwrap_factory2 ( result ) ;
let result = api . create_robot (
robocraft2 ::CreateRobotPayload {
name : " API is easy " . to_owned ( ) ,
data : robot . data , // base64
image : " " . to_owned ( ) , // base64
base_cpu : 42 ,
weapon_cpu : 1 ,
cosmetic_cpu : 6 ,
cluster_count : 1 ,
block_counts : vec ! [
( 42 , 3 ) ,
( 3 , 6 )
] . drain ( .. ) . collect ( ) ,
materials_used : vec ! [
8 ,
4
] . drain ( .. ) . collect ( ) ,
minimum_offset_x : 0.0 ,
minimum_offset_y : 0.0 ,
minimum_offset_z : 0.0 ,
maximum_offset_x : 0.0 ,
maximum_offset_y : 0.0 ,
maximum_offset_z : 0.0 ,
}
) . await ;
//assert!(result.is_ok());
let robot_info = unwrap_factory2 ( result ) ;
println! ( " CreateRobotInfo {:?} " , robot_info ) ;
let result = api . publish_robot (
robocraft2 ::PublishRobotPayload {
name : " CRF API oh my " . to_owned ( ) ,
description : " There once was a person named NGnius, who simply wasn't that bright. \n But he had a misleading name, and wasn't not quite unhated \n So he thought it alright to put up a fight \n and get banned for reverse engineering " . to_owned ( ) ,
techpoints : - 42 ,
bloxcoin : 123
} , robot_info . header . id . clone ( ) ) . await ;
//assert!(result.is_ok());
let _publish_info = unwrap_factory2 ( result ) ;
// clean up
let result = api . unpublish_bot ( robot_info . header . id . clone ( ) ) . await ;
//assert!(result.is_ok());
let _robot = unwrap_factory2 ( result ) ;
let result = api . delete_robot ( robot_info . header . id ) . await ;
//assert!(result.is_ok());
let _robot = unwrap_factory2 ( result ) ;
Ok ( ( ) )
}
#[ cfg(feature = " robocraft2 " ) ]
#[ tokio::test ]
async fn robocraft2_factory_my_bots ( ) -> Result < ( ) , ( ) > {
let api = robocraft2 ::FactoryAPI ::with_auth ( Box ::new ( robocraft2 ::PortalTokenProvider ::with_username ( " FJAPIC00L " , " P4$$w0rd " ) . await . unwrap ( ) ) ) ;
let result = api . my_robots ( ) . await ;
assert! ( result . is_ok ( ) ) ;
let robo_info = unwrap_factory2 ( result ) ;
assert_ne! ( robo_info . vehicles . len ( ) , 0 ) ;
for robot in & robo_info . vehicles {
assert_ne! ( robot . name , " " ) ;
assert_ne! ( robot . creator_id , " " ) ;
assert_ne! ( robot . creator_id , " " ) ;
assert_ne! ( robot . image , " " ) ;
println! ( " My bot ` {} ` " , robot . to_string ( ) ) ;
//println!("my vehicle {}", serde_json::to_string_pretty(&robot).unwrap());
}
Ok ( ( ) )
}
#[ cfg(feature = " robocraft2 " ) ]
#[ tokio::test ]
async fn robocraft2_factory_my_published_bots ( ) -> Result < ( ) , ( ) > {
let api = robocraft2 ::FactoryAPI ::with_auth ( Box ::new ( robocraft2 ::PortalTokenProvider ::with_username ( " FJAPIC00L " , " P4$$w0rd " ) . await . unwrap ( ) ) ) ;
let result = api . my_published_robots ( ) . await ;
assert! ( result . is_ok ( ) ) ;
let robo_info = unwrap_factory2 ( result ) ;
//assert_ne!(robo_info.vehicles.len(), 0);
for robot in & robo_info . vehicles {
assert_ne! ( robot . name , " " ) ;
assert_ne! ( robot . creator_id , " " ) ;
assert_ne! ( robot . creator_id , " " ) ;
assert_ne! ( robot . image , " " ) ;
println! ( " My pub bot ` {} ` " , robot . to_string ( ) ) ;
//println!("pub vehicle {}", serde_json::to_string_pretty(&robot).unwrap());
}
Ok ( ( ) )
}
#[ cfg(feature = " robocraft2 " ) ]
//#[tokio::test]
async fn robocraft2_factory_bot ( ) -> Result < ( ) , ( ) > {
let api = robocraft2 ::FactoryAPI ::with_auth ( Box ::new ( robocraft2 ::PortalTokenProvider ::with_username ( " FJAPIC00L " , " P4$$w0rd " ) . await . unwrap ( ) ) ) ;
let result = api . get ( " 08dab2c9-7a72-4ec4-843c-154fe8768e91 " . to_owned ( ) ) . await ;
//assert!(result.is_ok());
let robot = unwrap_factory2 ( result ) ;
assert_ne! ( robot . header . name , " " ) ;
assert_ne! ( robot . header . creator_id , " " ) ;
assert_ne! ( robot . header . creator_id , " " ) ;
//assert_ne!(robot.header.image, "");
//assert_ne!(robot.description, "");
assert_ne! ( robot . data , " " ) ;
println! ( " robot {} " , serde_json ::to_string_pretty ( & robot ) . unwrap ( ) ) ;
Ok ( ( ) )
}
#[ cfg(feature = " robocraft2 " ) ]
//#[tokio::test]
async fn robocraft2_factory_delete_bot ( ) -> Result < ( ) , ( ) > {
let api = robocraft2 ::FactoryAPI ::with_auth ( Box ::new ( robocraft2 ::PortalTokenProvider ::with_username ( " FJAPIC00L " , " P4$$w0rd " ) . await . unwrap ( ) ) ) ;
let result = api . delete_robot ( " 08dab2d2-dcae-4f52-8a77-bbce7cf10124 " . to_owned ( ) ) . await ;
//assert!(result.is_ok());
let _robot = unwrap_factory2 ( result ) ;
Ok ( ( ) )
}
#[ cfg(feature = " robocraft2 " ) ]
//#[tokio::test]
async fn robocraft2_factory_unpublish_bot ( ) -> Result < ( ) , ( ) > {
let api = robocraft2 ::FactoryAPI ::with_auth ( Box ::new ( robocraft2 ::PortalTokenProvider ::with_username ( " FJAPIC00L " , " P4$$w0rd " ) . await . unwrap ( ) ) ) ;
let result = api . unpublish_bot ( " 08dab2d3-2a68-48c6-8fd6-a59a663336ca " . to_owned ( ) ) . await ;
//assert!(result.is_ok());
let _robot = unwrap_factory2 ( result ) ;
Ok ( ( ) )
}
fn unwrap_factory2 < T > ( result : Result < T , robocraft2 ::FactoryError > ) -> T {
match result {
Ok ( t ) = > t ,
Err ( e ) = > {
//println!("FactoryError: {}", e);
panic! ( " CRF2 Error: {} " , e ) ;
}
}
}