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.

142 lines
5.0KB

  1. #[cfg(feature = "robocraft")]
  2. use libfj::robocraft;
  3. #[cfg(feature = "robocraft")]
  4. use libfj::robocraft2;
  5. #[cfg(feature = "robocraft")]
  6. use std::convert::From;
  7. #[cfg(feature = "robocraft")]
  8. #[test]
  9. fn robocraft_factory_api_init() -> Result<(), ()> {
  10. robocraft::FactoryAPI::new();
  11. Ok(())
  12. }
  13. #[cfg(feature = "robocraft")]
  14. #[tokio::test]
  15. async fn robocraft_factory_default_query() -> Result<(), ()> {
  16. let api = robocraft::FactoryAPI::new();
  17. let result = api.list().await;
  18. assert!(result.is_ok());
  19. let robo_info = result.unwrap();
  20. assert_ne!(robo_info.response.roboshop_items.len(), 0);
  21. assert_eq!(robo_info.status_code, 200);
  22. for robot in &robo_info.response.roboshop_items {
  23. assert_ne!(robot.item_name, "");
  24. assert_ne!(robot.added_by, "");
  25. assert_ne!(robot.added_by_display_name, "");
  26. assert_ne!(robot.thumbnail, "");
  27. println!("FactoryRobotListInfo.to_string() -> `{}`", robot.to_string());
  28. }
  29. Ok(())
  30. }
  31. #[cfg(feature = "robocraft2")]
  32. #[tokio::test]
  33. async fn robocraft2_factory_default_query() -> Result<(), ()> {
  34. let api = robocraft2::FactoryAPI::with_auth(Box::new(robocraft2::PortalTokenProvider::with_username("FJAPIC00L", "P4$$w0rd").await.unwrap()));
  35. let result = api.list().await;
  36. assert!(result.is_ok());
  37. let robo_info = result.unwrap();
  38. assert_ne!(robo_info.results.len(), 0);
  39. for robot in &robo_info.results {
  40. assert_ne!(robot.robot.name, "");
  41. assert_ne!(robot.robot.creator_id, "");
  42. assert_ne!(robot.robot.creator_id, "");
  43. assert_ne!(robot.robot.image, "");
  44. //println!("FactoryRobotListInfo.to_string() -> `{}`", robot.to_string());
  45. }
  46. Ok(())
  47. }
  48. #[cfg(feature = "robocraft")]
  49. fn builder() -> robocraft::FactorySearchBuilder {
  50. robocraft::FactoryAPI::new().list_builder()
  51. }
  52. #[cfg(feature = "robocraft")]
  53. fn assert_factory_list(robo_info: robocraft::FactoryInfo<robocraft::RoboShopItemsInfo>) -> Result<(), ()> {
  54. assert_ne!(robo_info.response.roboshop_items.len(), 0);
  55. assert_eq!(robo_info.status_code, 200);
  56. for robot in &robo_info.response.roboshop_items {
  57. assert_ne!(robot.item_name, "");
  58. assert_ne!(robot.added_by, "");
  59. assert_ne!(robot.added_by_display_name, "");
  60. assert_ne!(robot.thumbnail, "");
  61. println!("FactoryRobotListInfo.to_string() -> `{}`", robot.to_string());
  62. }
  63. Ok(())
  64. }
  65. #[cfg(feature = "robocraft")]
  66. #[tokio::test]
  67. async fn robocraft_factory_custom_query() -> Result<(), ()> {
  68. let api = robocraft::FactoryAPI::new();
  69. let result = api.list_builder()
  70. .movement_or(robocraft::FactoryMovementType::Wheels)
  71. .weapon_or(robocraft::FactoryWeaponType::Laser)
  72. .page(2)
  73. .items_per_page(10)
  74. .send().await;
  75. assert!(result.is_ok());
  76. let robo_info = result.unwrap();
  77. assert_ne!(robo_info.response.roboshop_items.len(), 0);
  78. //assert_eq!(robo_info.response.roboshop_items.len(), 16); the API behaviour is weird, I swear it's not me!
  79. assert!(robo_info.response.roboshop_items.len() >= 10);
  80. assert_eq!(robo_info.status_code, 200);
  81. for robot in &robo_info.response.roboshop_items {
  82. assert_ne!(robot.item_name, "");
  83. assert_ne!(robot.added_by, "");
  84. assert_ne!(robot.added_by_display_name, "");
  85. assert_ne!(robot.thumbnail, "");
  86. println!("FactoryRobotListInfo.to_string() -> `{}`", robot.to_string());
  87. }
  88. Ok(())
  89. }
  90. #[cfg(feature = "robocraft")]
  91. #[tokio::test]
  92. async fn robocraft_factory_player_query() -> Result<(), ()> {
  93. let result = builder()
  94. .text("Spacecam".to_string()) // there is a featured robot by this user, so this should never fail
  95. .text_search_type(robocraft::FactoryTextSearchType::Player)
  96. .items_per_page(10)
  97. .send().await;
  98. assert!(result.is_ok());
  99. assert_factory_list(result.unwrap())
  100. }
  101. #[cfg(feature = "robocraft")]
  102. #[tokio::test]
  103. async fn robocraft_factory_robot_query() -> Result<(), ()> {
  104. let api = robocraft::FactoryAPI::new();
  105. let result = api.get(6478345 /* featured robot id */).await;
  106. assert!(result.is_ok());
  107. let bot_info = result.unwrap();
  108. assert_ne!(bot_info.response.item_name, "");
  109. assert_eq!(bot_info.response.item_id, 6478345);
  110. assert_ne!(bot_info.response.cube_data, "");
  111. assert_ne!(bot_info.response.colour_data, "");
  112. Ok(())
  113. }
  114. #[cfg(feature = "robocraft")]
  115. #[tokio::test]
  116. async fn robocraft_factory_robot_cubes() -> Result<(), ()> {
  117. let api = robocraft::FactoryAPI::new();
  118. let result = api.get(6478345 /* featured robot id */).await;
  119. assert!(result.is_ok());
  120. let bot_info = result.unwrap();
  121. let cubes = robocraft::Cubes::from(bot_info.clone());
  122. println!("cube count: {} or {}", cubes.provided_len, cubes.len());
  123. /*for c in cubes.into_iter() {
  124. println!("Cube.to_string() -> `{}`", c.to_string());
  125. }*/
  126. let (cube_d, colour_d) = cubes.dump();
  127. let cube_str = base64::encode(&cube_d);
  128. let colour_str = base64::encode(&colour_d);
  129. assert_eq!(cube_str, bot_info.response.cube_data);
  130. assert_eq!(colour_str, bot_info.response.colour_data);
  131. Ok(())
  132. }