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.

241 lines
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. }