api_version_test.rb 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. # frozen_string_literal: true
  2. require 'test_helper'
  3. class ApiVersionTest < Test::Unit::TestCase
  4. test "coerce_to_version returns any version object given" do
  5. version = ShopifyAPI::ApiVersion.new(handle: :unstable)
  6. assert_same(version, ShopifyAPI::ApiVersion.coerce_to_version(version))
  7. end
  8. test "coerce_to_version converts a known version into a version object" do
  9. versions = [
  10. ShopifyAPI::ApiVersion.new(handle: :unstable),
  11. ShopifyAPI::ApiVersion.new(handle: '2019-01'),
  12. ]
  13. assert_equal(versions, [
  14. ShopifyAPI::ApiVersion.coerce_to_version('unstable'),
  15. ShopifyAPI::ApiVersion.coerce_to_version('2019-01'),
  16. ])
  17. end
  18. test "coerce_to_version removes unpersisted versions from version set if mode is set to :predefined_only" do
  19. ShopifyAPI::ApiVersion.coercion_mode = :define_on_unknown
  20. assert ShopifyAPI::ApiVersion.versions.values.all?(&:persisted?)
  21. assert_equal 5, ShopifyAPI::ApiVersion.versions.size
  22. ShopifyAPI::ApiVersion.coerce_to_version('2019-30')
  23. refute ShopifyAPI::ApiVersion.versions.values.all?(&:persisted?)
  24. assert_equal 6, ShopifyAPI::ApiVersion.versions.size
  25. ShopifyAPI::ApiVersion.coercion_mode = :predefined_only
  26. assert ShopifyAPI::ApiVersion.versions.values.all?(&:persisted?)
  27. assert_equal 5, ShopifyAPI::ApiVersion.versions.size
  28. end
  29. test "coerce_to_version does not raise when coercing a string if no versions are defined when coercion_mode is :define_on_unknown" do
  30. ShopifyAPI::ApiVersion.clear_defined_versions
  31. ShopifyAPI::ApiVersion.coercion_mode = :define_on_unknown
  32. assert_equal :define_on_unknown, ShopifyAPI::ApiVersion.coercion_mode
  33. assert_nothing_raised do
  34. ShopifyAPI::ApiVersion.coerce_to_version('made up version')
  35. end
  36. end
  37. test "coerce_to_version does raise when coercing a string if no versions are defined when coercion_mode is :predefined_only" do
  38. refute ShopifyAPI::ApiVersion.versions['made up version']
  39. ShopifyAPI::ApiVersion.coercion_mode = :predefined_only
  40. assert_raises ShopifyAPI::ApiVersion::UnknownVersion do
  41. ShopifyAPI::ApiVersion.coerce_to_version('made up version')
  42. end
  43. end
  44. test 'two versions with the same version number are equal' do
  45. version_1 = ShopifyAPI::ApiVersion.new(handle: '2018-09')
  46. version_2 = ShopifyAPI::ApiVersion.new(handle: '2018-09')
  47. assert_equal version_2, version_1
  48. end
  49. test 'two versions with the different version numbers are not equal' do
  50. version_1 = ShopifyAPI::ApiVersion.new(handle: '2019-07')
  51. version_2 = ShopifyAPI::ApiVersion.new(handle: '2019-11')
  52. refute_equal version_2, version_1
  53. end
  54. test 'versions are ordered by version number with unstable always being the newest' do
  55. version_1 = ShopifyAPI::ApiVersion.new(handle: '2017-11')
  56. version_2 = ShopifyAPI::ApiVersion.new(handle: '2019-11')
  57. version_3 = ShopifyAPI::ApiVersion.new(handle: '2039-01')
  58. version_4 = ShopifyAPI::ApiVersion.new(handle: '2039-02')
  59. unstable = ShopifyAPI::ApiVersion.new(handle: :unstable)
  60. assert_equal([
  61. version_1,
  62. version_2,
  63. version_3,
  64. version_4,
  65. unstable,
  66. ], [
  67. version_3,
  68. version_1,
  69. version_4,
  70. unstable,
  71. version_2,
  72. ].sort)
  73. end
  74. test 'latest_stable_version will return the version that is newest and stable' do
  75. assert_equal(
  76. ShopifyAPI::ApiVersion.versions,
  77. {
  78. "2019-01" => ShopifyAPI::ApiVersion.new(handle: '2019-01', supported: true, latest_supported: false),
  79. "2019-04" => ShopifyAPI::ApiVersion.new(handle: '2019-04', supported: true, latest_supported: false),
  80. "2019-07" => ShopifyAPI::ApiVersion.new(handle: '2019-07', supported: true, latest_supported: true),
  81. "2019-10" => ShopifyAPI::ApiVersion.new(handle: '2019-10', supported: false, latest_supported: false),
  82. "unstable" => ShopifyAPI::ApiVersion.new(handle: 'unstable', supported: false, latest_supported: false),
  83. }
  84. )
  85. silence_warnings do
  86. refute_equal(
  87. ShopifyAPI::ApiVersion.new(handle: '2019-01'),
  88. ShopifyAPI::ApiVersion.latest_stable_version
  89. )
  90. assert_equal(
  91. ShopifyAPI::ApiVersion.new(handle: '2019-07'),
  92. ShopifyAPI::ApiVersion.latest_stable_version
  93. )
  94. end
  95. end
  96. test "NullVersion raises ApiVersionNotSetError" do
  97. assert_raises(ShopifyAPI::ApiVersion::ApiVersionNotSetError) do
  98. ShopifyAPI::ApiVersion::NullVersion.construct_api_path(:string)
  99. end
  100. assert_raises(ShopifyAPI::ApiVersion::ApiVersionNotSetError) do
  101. ShopifyAPI::ApiVersion::NullVersion.construct_graphql_path
  102. end
  103. assert_raises(ShopifyAPI::ApiVersion::ApiVersionNotSetError) do
  104. ShopifyAPI::ApiVersion::NullVersion.stable?
  105. end
  106. end
  107. test "handle_to_date converts a version handle to a date" do
  108. version_1 = ShopifyAPI::ApiVersion.new(handle: '2019-01')
  109. version_2 = ShopifyAPI::ApiVersion.new(handle: 'unstable')
  110. assert_equal(version_1.handle_as_date, Time.utc(2019, 01, 01))
  111. assert_equal(version_2.handle_as_date, ShopifyAPI::ApiVersion::UNSTABLE_AS_DATE)
  112. end
  113. class TestApiVersion < ShopifyAPI::ApiVersion
  114. def initialize(name)
  115. @version_name = name
  116. end
  117. end
  118. end