An unofficial collection of APIs used in FreeJam games and mods
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

241 lignes
8.2KB

  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. async fn robocraft2_factory_sort() -> Result<(), ()> {
  53. let api = builder().await;
  54. let mut query = robocraft2::SearchPayload::default();
  55. query.sort_by = robocraft2::sort::DEFAULT;
  56. query.order_by = robocraft2::order::ASCENDING;
  57. let result = api.search(query).await;
  58. let robo_info = unwrap_factory2(result);
  59. assert_ne!(robo_info.results.len(), 0);
  60. for robot in &robo_info.results {
  61. assert_ne!(robot.robot.name, "");
  62. assert_ne!(robot.robot.creator_id, "");
  63. assert_ne!(robot.robot.creator_id, "");
  64. //println!("RobotInfo.to_string() -> `{}`", robot.robot.to_string());
  65. //println!("SearchResponseItem {}", serde_json::to_string_pretty(&robot).unwrap());
  66. println!("date: {}", robot.robot.created);
  67. }
  68. Ok(())
  69. }
  70. #[cfg(feature = "robocraft2")]
  71. #[tokio::test]
  72. async fn robocraft2_factory_info() -> Result<(), ()> {
  73. let api = builder().await;
  74. let result = api.factory_info().await;
  75. assert!(result.is_ok());
  76. let crf_info = unwrap_factory2(result);
  77. println!("FactoryInfo {:?}", crf_info);
  78. Ok(())
  79. }
  80. #[cfg(feature = "robocraft2")]
  81. //#[tokio::test]
  82. #[allow(dead_code)]
  83. async fn robocraft2_factory_upload() -> Result<(), ()> {
  84. let api = builder().await;
  85. // copy default bot
  86. let result = api.get("08dab2c9-7a72-4ec4-843c-154fe8768e91".to_owned()).await;
  87. assert!(result.is_ok());
  88. let robot = unwrap_factory2(result);
  89. let result = api.create_robot(
  90. robocraft2::CreateRobotPayload {
  91. name: "API is easy".to_owned(),
  92. data: robot.data, // base64
  93. image: "".to_owned(), // base64
  94. base_cpu: 42,
  95. weapon_cpu: 1,
  96. cosmetic_cpu: 6,
  97. cluster_count: 1,
  98. block_counts: vec![
  99. (42, 3),
  100. (3, 6)
  101. ].drain(..).collect(),
  102. materials_used: vec![
  103. 8,
  104. 4
  105. ].drain(..).collect(),
  106. minimum_offset_x: 0.0,
  107. minimum_offset_y: 0.0,
  108. minimum_offset_z: 0.0,
  109. maximum_offset_x: 0.0,
  110. maximum_offset_y: 0.0,
  111. maximum_offset_z: 0.0,
  112. }
  113. ).await;
  114. //assert!(result.is_ok());
  115. let robot_info = unwrap_factory2(result);
  116. println!("CreateRobotInfo {:?}", robot_info);
  117. let result = api.publish_robot(
  118. robocraft2::PublishRobotPayload {
  119. name: "CRF API oh my".to_owned(),
  120. 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(),
  121. techpoints: -42,
  122. bloxcoin: 123
  123. }, robot_info.header.id.clone()).await;
  124. //assert!(result.is_ok());
  125. let _publish_info = unwrap_factory2(result);
  126. // clean up
  127. let result = api.unpublish_bot(robot_info.header.id.clone()).await;
  128. //assert!(result.is_ok());
  129. let _robot = unwrap_factory2(result);
  130. let result = api.delete_robot(robot_info.header.id).await;
  131. //assert!(result.is_ok());
  132. let _robot = unwrap_factory2(result);
  133. Ok(())
  134. }
  135. #[cfg(feature = "robocraft2")]
  136. #[tokio::test]
  137. async fn robocraft2_factory_my_bots() -> Result<(), ()> {
  138. let api = robocraft2::FactoryAPI::with_auth(Box::new(robocraft2::PortalTokenProvider::with_username("FJAPIC00L", "P4$$w0rd").await.unwrap()));
  139. let result = api.my_robots().await;
  140. assert!(result.is_ok());
  141. let robo_info = unwrap_factory2(result);
  142. assert_ne!(robo_info.vehicles.len(), 0);
  143. for robot in &robo_info.vehicles {
  144. assert_ne!(robot.name, "");
  145. assert_ne!(robot.creator_id, "");
  146. assert_ne!(robot.creator_id, "");
  147. assert_ne!(robot.image, None);
  148. assert_ne!(robot.image.as_ref().unwrap(), "");
  149. println!("My bot `{}`", robot.to_string());
  150. //println!("my vehicle {}", serde_json::to_string_pretty(&robot).unwrap());
  151. }
  152. Ok(())
  153. }
  154. #[cfg(feature = "robocraft2")]
  155. #[tokio::test]
  156. async fn robocraft2_factory_my_published_bots() -> Result<(), ()> {
  157. let api = robocraft2::FactoryAPI::with_auth(Box::new(robocraft2::PortalTokenProvider::with_username("FJAPIC00L", "P4$$w0rd").await.unwrap()));
  158. let result = api.my_published_robots().await;
  159. assert!(result.is_ok());
  160. let robo_info = unwrap_factory2(result);
  161. //assert_ne!(robo_info.vehicles.len(), 0);
  162. for robot in &robo_info.vehicles {
  163. assert_ne!(robot.name, "");
  164. assert_ne!(robot.creator_id, "");
  165. assert_ne!(robot.creator_id, "");
  166. assert_ne!(robot.image, None);
  167. assert_ne!(robot.image.as_ref().unwrap(), "");
  168. println!("My pub bot `{}`", robot.to_string());
  169. //println!("pub vehicle {}", serde_json::to_string_pretty(&robot).unwrap());
  170. }
  171. Ok(())
  172. }
  173. #[cfg(feature = "robocraft2")]
  174. //#[tokio::test]
  175. #[allow(dead_code)]
  176. async fn robocraft2_factory_bot() -> Result<(), ()> {
  177. let api = robocraft2::FactoryAPI::with_auth(Box::new(robocraft2::PortalTokenProvider::with_username("FJAPIC00L", "P4$$w0rd").await.unwrap()));
  178. let result = api.get("08dab2c9-7a72-4ec4-843c-154fe8768e91".to_owned()).await;
  179. //assert!(result.is_ok());
  180. let robot = unwrap_factory2(result);
  181. assert_ne!(robot.header.name, "");
  182. assert_ne!(robot.header.creator_id, "");
  183. assert_ne!(robot.header.creator_id, "");
  184. //assert_ne!(robot.header.image, "");
  185. //assert_ne!(robot.description, "");
  186. assert_ne!(robot.data, "");
  187. println!("robot {}", serde_json::to_string_pretty(&robot).unwrap());
  188. Ok(())
  189. }
  190. #[cfg(feature = "robocraft2")]
  191. //#[tokio::test]
  192. #[allow(dead_code)]
  193. async fn robocraft2_factory_delete_all_my_bots() -> Result<(), ()> {
  194. let api = builder().await;
  195. let my_bots = api.my_published_robots().await.unwrap();
  196. for bot in my_bots.vehicles {
  197. let result = api.delete_robot(bot.id).await;
  198. unwrap_factory2(result);
  199. }
  200. Ok(())
  201. }
  202. #[cfg(feature = "robocraft2")]
  203. //#[tokio::test]
  204. #[allow(dead_code)]
  205. async fn robocraft2_factory_unpublish_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.unpublish_bot(bot.id).await;
  210. unwrap_factory2(result);
  211. }
  212. Ok(())
  213. }
  214. fn unwrap_factory2<T>(result: Result<T, robocraft2::FactoryError>) -> T {
  215. match result {
  216. Ok(t) => t,
  217. Err(e) => {
  218. //println!("FactoryError: {}", e);
  219. panic!("CRF2 Error: {}", e);
  220. }
  221. }
  222. }