api_version_test.rb 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. # frozen_string_literal: true
  2. require 'test_helper'
  3. class ApiVersionTest < Test::Unit::TestCase
  4. def teardown
  5. super
  6. ShopifyAPI::ApiVersion.clear_defined_versions
  7. ShopifyAPI::ApiVersion.define_known_versions
  8. end
  9. test "unstable version creates url that start with /admin/api/unstable/" do
  10. assert_equal(
  11. "/admin/api/unstable/resource_path/id.json",
  12. ShopifyAPI::ApiVersion::Unstable.new.construct_api_path("resource_path/id.json")
  13. )
  14. end
  15. test "unstable version creates graphql url that start with /admin/api/unstable/" do
  16. assert_equal(
  17. "/admin/api/unstable/graphql.json",
  18. ShopifyAPI::ApiVersion::Unstable.new.construct_graphql_path
  19. )
  20. end
  21. test "coerce_to_version returns any version object given" do
  22. version = ShopifyAPI::ApiVersion::Unstable.new
  23. assert_same(version, ShopifyAPI::ApiVersion.coerce_to_version(version))
  24. end
  25. test "coerce_to_version converts a known version into a version object" do
  26. versions = [
  27. ShopifyAPI::ApiVersion::Unstable.new,
  28. ShopifyAPI::ApiVersion::Release.new('2019-01'),
  29. ]
  30. assert_equal(versions, [
  31. ShopifyAPI::ApiVersion.coerce_to_version('unstable'),
  32. ShopifyAPI::ApiVersion.coerce_to_version('2019-01'),
  33. ])
  34. end
  35. test "coerce_to_version raises when coercing a string that doesn't match a known version" do
  36. assert_raises ShopifyAPI::ApiVersion::UnknownVersion do
  37. ShopifyAPI::ApiVersion.coerce_to_version('made up version')
  38. end
  39. end
  40. test "additional defined versions will also be coerced" do
  41. versions = [
  42. TestApiVersion.new('my_name'),
  43. TestApiVersion.new('other_name'),
  44. ]
  45. versions.each do |version|
  46. ShopifyAPI::ApiVersion.define_version(version)
  47. end
  48. assert_equal(versions, [
  49. ShopifyAPI::ApiVersion.coerce_to_version('my_name'),
  50. ShopifyAPI::ApiVersion.coerce_to_version('other_name'),
  51. ])
  52. end
  53. test 'allows a release version with the correct format format to be created' do
  54. assert ShopifyAPI::ApiVersion::Release.new('2019-03')
  55. end
  56. test 'release versions must follow the format' do
  57. assert_raises ShopifyAPI::ApiVersion::InvalidVersion do
  58. assert ShopifyAPI::ApiVersion::Release.new('crazy-name')
  59. end
  60. end
  61. test 'release versions create a url that is /admin/api/<version_name>/' do
  62. assert_equal(
  63. '/admin/api/2022-03/shop.json',
  64. ShopifyAPI::ApiVersion::Release.new('2022-03').construct_api_path('shop.json')
  65. )
  66. end
  67. test 'two versions with the same version number are equal' do
  68. version_1 = ShopifyAPI::ApiVersion::Release.new('2018-09')
  69. version_2 = ShopifyAPI::ApiVersion::Release.new('2018-09')
  70. assert_equal version_2, version_1
  71. end
  72. test 'two versions with the different version numbers are not equal' do
  73. version_1 = ShopifyAPI::ApiVersion::Release.new('2019-07')
  74. version_2 = ShopifyAPI::ApiVersion::Release.new('2019-11')
  75. refute_equal version_2, version_1
  76. end
  77. test 'release verions are stable' do
  78. assert_predicate ShopifyAPI::ApiVersion::Release.new('2019-11'), :stable?
  79. end
  80. test 'no release version are not stable' do
  81. refute_predicate ShopifyAPI::ApiVersion::Unstable.new, :stable?
  82. end
  83. test 'release versions are ordered by version number with unstable always being the newest' do
  84. version_1 = ShopifyAPI::ApiVersion::Release.new('2017-11')
  85. version_2 = ShopifyAPI::ApiVersion::Release.new('2019-11')
  86. version_3 = ShopifyAPI::ApiVersion::Release.new('2039-01')
  87. version_4 = ShopifyAPI::ApiVersion::Release.new('2039-02')
  88. unstable = ShopifyAPI::ApiVersion::Unstable.new
  89. assert_equal([
  90. version_1,
  91. version_2,
  92. version_3,
  93. version_4,
  94. unstable,
  95. ], [
  96. version_3,
  97. version_1,
  98. version_4,
  99. unstable,
  100. version_2,
  101. ].sort)
  102. end
  103. test 'latest_stable_version will return the version that is newest and stable' do
  104. ShopifyAPI::ApiVersion.clear_defined_versions
  105. ShopifyAPI::ApiVersion.define_version(ShopifyAPI::ApiVersion::Release.new('2017-11'))
  106. ShopifyAPI::ApiVersion.define_version(ShopifyAPI::ApiVersion::Release.new('2019-11'))
  107. ShopifyAPI::ApiVersion.define_version(ShopifyAPI::ApiVersion::Release.new('2039-01'))
  108. ShopifyAPI::ApiVersion.define_version(ShopifyAPI::ApiVersion::Release.new('2039-02'))
  109. ShopifyAPI::ApiVersion.define_version(ShopifyAPI::ApiVersion::Unstable.new)
  110. assert_equal(
  111. ShopifyAPI::ApiVersion::Release.new('2039-02'),
  112. ShopifyAPI::ApiVersion.latest_stable_version
  113. )
  114. end
  115. class TestApiVersion < ShopifyAPI::ApiVersion
  116. def initialize(name)
  117. @version_name = name
  118. end
  119. end
  120. end