An unofficial collection of APIs used in FreeJam games and mods
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

robocraft2_factory.rs 8.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. #[cfg(feature = "robocraft2")]
  2. use libfj::robocraft2;
  3. #[cfg(feature = "robocraft2")]
  4. async fn builder() -> robocraft2::FactoryAPI {
  5. let token = robocraft2::PortalTokenProvider::with_username("FJAPIC00L", "P4$$w0rd").await.unwrap();
  6. robocraft2::FactoryAPI::with_auth(Box::new(token))
  7. }
  8. #[cfg(feature = "robocraft2")]
  9. //#[tokio::test]
  10. #[allow(dead_code)]
  11. async fn robocraft2_factory_moderate() -> Result<(), ()> {
  12. let api = builder().await;
  13. let robot = api.list().await.unwrap().results.pop().unwrap();
  14. let result = api.moderate(robocraft2::ModerateRobotPayload {
  15. approve: false,
  16. reason: "Automated test".to_owned(),
  17. }, robot.robot.id).await;
  18. assert!(result.is_ok());
  19. Ok(())
  20. }
  21. #[cfg(feature = "robocraft2")]
  22. //#[tokio::test]
  23. #[allow(dead_code)]
  24. async fn robocraft2_factory_report() -> Result<(), ()> {
  25. let api = builder().await;
  26. let robot = api.list().await.unwrap().results.pop().unwrap();
  27. let result = api.report(robocraft2::ReportRobotPayload {
  28. reason: "Automated test".to_owned(),
  29. }, robot.robot.id).await;
  30. assert!(result.is_ok());
  31. Ok(())
  32. }
  33. #[cfg(feature = "robocraft2")]
  34. #[tokio::test]
  35. async fn robocraft2_factory_default_query() -> Result<(), ()> {
  36. let api = builder().await;
  37. let result = api.list().await;
  38. assert!(result.is_ok());
  39. let robo_info = unwrap_factory2(result);
  40. assert_ne!(robo_info.results.len(), 0);
  41. for robot in &robo_info.results {
  42. assert_ne!(robot.robot.name, "");
  43. assert_ne!(robot.robot.creator_id, "");
  44. assert_ne!(robot.robot.creator_id, "");
  45. //println!("RobotInfo.to_string() -> `{}`", robot.robot.to_string());
  46. println!("SearchResponseItem {}", serde_json::to_string_pretty(&robot).unwrap());
  47. }
  48. Ok(())
  49. }
  50. #[cfg(feature = "robocraft2")]
  51. #[tokio::test]
  52. #[allow(dead_code)]
  53. async fn robocraft2_factory_info_query() -> Result<(), ()> {
  54. let api = builder().await;
  55. let result = api.get("08dadf8d-1953-44bc-8d49-c432f6640723".to_owned()).await;
  56. assert!(result.is_ok());
  57. let robo_info = unwrap_factory2(result);
  58. println!("GetRobotResponse {}", serde_json::to_string_pretty(&robo_info).unwrap());
  59. Ok(())
  60. }
  61. #[cfg(feature = "robocraft2")]
  62. #[tokio::test]
  63. async fn robocraft2_factory_sort() -> Result<(), ()> {
  64. let api = builder().await;
  65. let mut query = robocraft2::SearchPayload::default();
  66. query.sort_by = robocraft2::sort::DATE;
  67. query.order_by = robocraft2::order::ASCENDING;
  68. let result = api.search(query).await;
  69. let robo_info = unwrap_factory2(result);
  70. assert_ne!(robo_info.results.len(), 0);
  71. for robot in &robo_info.results {
  72. assert_ne!(robot.robot.name, "");
  73. assert_ne!(robot.robot.creator_id, "");
  74. assert_ne!(robot.robot.creator_id, "");
  75. //println!("RobotInfo.to_string() -> `{}`", robot.robot.to_string());
  76. //println!("SearchResponseItem {}", serde_json::to_string_pretty(&robot).unwrap());
  77. println!("date: {}", robot.robot.created);
  78. }
  79. println!("first url: {}", robo_info.results[0].robot.image.as_ref().unwrap());
  80. Ok(())
  81. }
  82. #[cfg(feature = "robocraft2")]
  83. #[tokio::test]
  84. async fn robocraft2_factory_info() -> Result<(), ()> {
  85. let api = builder().await;
  86. let result = api.factory_info().await;
  87. assert!(result.is_ok());
  88. let crf_info = unwrap_factory2(result);
  89. println!("FactoryInfo {:?}", crf_info);
  90. Ok(())
  91. }
  92. #[cfg(feature = "robocraft2")]
  93. //#[tokio::test]
  94. #[allow(dead_code)]
  95. async fn robocraft2_factory_upload() -> Result<(), ()> {
  96. let api = builder().await;
  97. // copy default bot
  98. let result = api.get("08dab2c9-7a72-4ec4-843c-154fe8768e91".to_owned()).await;
  99. assert!(result.is_ok());
  100. let robot = unwrap_factory2(result);
  101. let result = api.create_robot(
  102. robocraft2::CreateRobotPayload {
  103. name: "API is easy".to_owned(),
  104. data: robot.data, // base64
  105. image: "".to_owned(), // base64
  106. base_cpu: 42,
  107. weapon_cpu: 1,
  108. cosmetic_cpu: 6,
  109. cluster_count: 1,
  110. block_counts: vec![
  111. (42, 3),
  112. (3, 6)
  113. ].drain(..).collect(),
  114. materials_used: vec![
  115. 8,
  116. 4
  117. ].drain(..).collect(),
  118. minimum_offset_x: 0.0,
  119. minimum_offset_y: 0.0,
  120. minimum_offset_z: 0.0,
  121. maximum_offset_x: 0.0,
  122. maximum_offset_y: 0.0,
  123. maximum_offset_z: 0.0,
  124. }
  125. ).await;
  126. //assert!(result.is_ok());
  127. let robot_info = unwrap_factory2(result);
  128. println!("CreateRobotInfo {:?}", robot_info);
  129. let result = api.publish_robot(
  130. robocraft2::PublishRobotPayload {
  131. name: "CRF API oh my".to_owned(),
  132. description: "There once was a person named NGnius, who simply wasn't that bright.\nBut he had a misleading name, and wasn't not quite unhated\nSo he thought it alright to put up a fight\nand get banned for reverse engineering".to_owned(),
  133. techpoints: -42,
  134. bloxcoin: 123
  135. }, robot_info.header.id.clone()).await;
  136. //assert!(result.is_ok());
  137. let _publish_info = unwrap_factory2(result);
  138. // clean up
  139. let result = api.unpublish_bot(robot_info.header.id.clone()).await;
  140. //assert!(result.is_ok());
  141. let _robot = unwrap_factory2(result);
  142. let result = api.delete_robot(robot_info.header.id).await;
  143. //assert!(result.is_ok());
  144. let _robot = unwrap_factory2(result);
  145. Ok(())
  146. }
  147. #[cfg(feature = "robocraft2")]
  148. #[tokio::test]
  149. async fn robocraft2_factory_my_bots() -> Result<(), ()> {
  150. let api = robocraft2::FactoryAPI::with_auth(Box::new(robocraft2::PortalTokenProvider::with_username("FJAPIC00L", "P4$$w0rd").await.unwrap()));
  151. let result = api.my_robots().await;
  152. assert!(result.is_ok());
  153. let robo_info = unwrap_factory2(result);
  154. assert_ne!(robo_info.vehicles.len(), 0);
  155. for robot in &robo_info.vehicles {
  156. assert_ne!(robot.name, "");
  157. assert_ne!(robot.creator_id, "");
  158. assert_ne!(robot.creator_id, "");
  159. assert_ne!(robot.image, None);
  160. assert_ne!(robot.image.as_ref().unwrap(), "");
  161. println!("My bot `{}`", robot.to_string());
  162. //println!("my vehicle {}", serde_json::to_string_pretty(&robot).unwrap());
  163. }
  164. Ok(())
  165. }
  166. #[cfg(feature = "robocraft2")]
  167. #[tokio::test]
  168. async fn robocraft2_factory_my_published_bots() -> Result<(), ()> {
  169. let api = robocraft2::FactoryAPI::with_auth(Box::new(robocraft2::PortalTokenProvider::with_username("FJAPIC00L", "P4$$w0rd").await.unwrap()));
  170. let result = api.my_published_robots().await;
  171. assert!(result.is_ok());
  172. let robo_info = unwrap_factory2(result);
  173. //assert_ne!(robo_info.vehicles.len(), 0);
  174. for robot in &robo_info.vehicles {
  175. assert_ne!(robot.name, "");
  176. assert_ne!(robot.creator_id, "");
  177. assert_ne!(robot.creator_id, "");
  178. assert_ne!(robot.image, None);
  179. assert_ne!(robot.image.as_ref().unwrap(), "");
  180. println!("My pub bot `{}`", robot.to_string());
  181. //println!("pub vehicle {}", serde_json::to_string_pretty(&robot).unwrap());
  182. }
  183. Ok(())
  184. }
  185. #[cfg(feature = "robocraft2")]
  186. //#[tokio::test]
  187. #[allow(dead_code)]
  188. async fn robocraft2_factory_bot() -> Result<(), ()> {
  189. let api = robocraft2::FactoryAPI::with_auth(Box::new(robocraft2::PortalTokenProvider::with_username("FJAPIC00L", "P4$$w0rd").await.unwrap()));
  190. let result = api.get("08dab2c9-7a72-4ec4-843c-154fe8768e91".to_owned()).await;
  191. //assert!(result.is_ok());
  192. let robot = unwrap_factory2(result);
  193. assert_ne!(robot.header.name, "");
  194. assert_ne!(robot.header.creator_id, "");
  195. assert_ne!(robot.header.creator_id, "");
  196. //assert_ne!(robot.header.image, "");
  197. //assert_ne!(robot.description, "");
  198. assert_ne!(robot.data, "");
  199. println!("robot {}", serde_json::to_string_pretty(&robot).unwrap());
  200. Ok(())
  201. }
  202. #[cfg(feature = "robocraft2")]
  203. //#[tokio::test]
  204. #[allow(dead_code)]
  205. async fn robocraft2_factory_delete_all_my_bots() -> Result<(), ()> {
  206. let api = builder().await;
  207. let my_bots = api.my_published_robots().await.unwrap();
  208. for bot in my_bots.vehicles {
  209. let result = api.delete_robot(bot.id).await;
  210. unwrap_factory2(result);
  211. }
  212. Ok(())
  213. }
  214. #[cfg(feature = "robocraft2")]
  215. //#[tokio::test]
  216. #[allow(dead_code)]
  217. async fn robocraft2_factory_unpublish_all_my_bots() -> Result<(), ()> {
  218. let api = builder().await;
  219. let my_bots = api.my_published_robots().await.unwrap();
  220. for bot in my_bots.vehicles {
  221. let result = api.unpublish_bot(bot.id).await;
  222. unwrap_factory2(result);
  223. }
  224. Ok(())
  225. }
  226. fn unwrap_factory2<T>(result: Result<T, robocraft2::FactoryError>) -> T {
  227. match result {
  228. Ok(t) => t,
  229. Err(e) => {
  230. //println!("FactoryError: {}", e);
  231. panic!("CRF2 Error: {}", e);
  232. }
  233. }
  234. }