Guest User

Untitled

a guest
Jul 20th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.21 KB | None | 0 0
  1. require "#{File.dirname(__FILE__)}/helper.rb"
  2.  
  3. ###################################################################
  4. # make changes in lib/bt1/store.rb and use rake to run the tests #
  5. ###################################################################
  6.  
  7. class TestBT1Store < Test::Unit::TestCase
  8.  
  9. setup do
  10. @store = BT1::Store.new
  11. end
  12.  
  13. context "Updating the store" do
  14. test "Store starts off empty" do
  15. assert_equal 0, @store.size
  16. end
  17.  
  18. test "After the first update, Store#size is the number of records" do
  19. records = (1..10).map { BT1::Record.new(%w[random crapola]) }
  20. @store.update(records)
  21.  
  22. assert_equal 10, @store.size
  23. end
  24.  
  25. test "Old records that aren't in new snapshot are discarded" do
  26. old_records = (1..5).map { BT1::Record.new(%w[not shared at all]) }
  27.  
  28. shared_records = (1..3).map do
  29. BT1::Record.new(%w[shared between old and new])
  30. end
  31.  
  32. @store.update(old_records + shared_records)
  33.  
  34. assert_equal 8, @store.size
  35.  
  36. @store.update(shared_records)
  37. assert_equal 3, @store.size
  38. end
  39.  
  40. test "New records not in old snapshot are still added on update" do
  41. old_records = (1..5).map { BT1::Record.new(%w[not shared at all]) }
  42.  
  43. shared_records = (1..3).map do
  44. BT1::Record.new(%w[shared between old and new])
  45. end
  46.  
  47. new_records = (1..9).map do
  48. BT1::Record.new(%w[only in new snapshot])
  49. end
  50.  
  51. @store.update(old_records + shared_records)
  52. @store.update(shared_records + new_records)
  53.  
  54. assert_equal 12, @store.size
  55. end
  56.  
  57. test "Update preserves old reported status for shared records" do
  58. old_records = (1..5).map { BT1::Record.new(%w[not shared at all]) }
  59.  
  60. shared_records = (1..3).map do |i|
  61. rec = BT1::Record.new([:shared, i])
  62. rec.mark_reported
  63. rec
  64. end
  65.  
  66. @store.update(old_records + shared_records)
  67.  
  68. new_shared_records = (1..3).map do |i|
  69. rec = BT1::Record.new([:shared, i])
  70. end
  71.  
  72. new_records = (1..9).map do |i|
  73. BT1::Record.new([:new_only, i])
  74. end
  75.  
  76.  
  77. @store.update(new_shared_records + new_records)
  78.  
  79. assert_equal 12, @store.size
  80. assert @store.data[0..2].all? { |e| e.reported? }
  81. assert @store.data[3..-1].all? { |e| ! e.reported? }
  82. end
  83.  
  84. end
  85.  
  86. context "Fetching records from the store" do
  87.  
  88. test "Fetch grabs a specified amount of records and returns them in a collection" do
  89. records = (1..7).map do |i|
  90. BT1::Record.new(%w[A few records])
  91. end
  92.  
  93. @store.update(records)
  94.  
  95. fetched_records = @store.fetch(5)
  96. assert_equal 5, fetched_records.size
  97. end
  98.  
  99. test "Fetch should only return number of items in the collection when asked for more" do
  100. records = (1..7).map do |i|
  101. BT1::Record.new(%w[a bunch of records])
  102. end
  103.  
  104. @store.update(records)
  105.  
  106. fetched_records = @store.fetch(20)
  107. assert_equal 7, fetched_records.size
  108. end
  109.  
  110. test "Fetch should only pull up unreported records" do
  111. reported_records = (1..5).map do |i|
  112. rec = BT1::Record.new(%w[reported records])
  113. rec.mark_reported
  114. rec
  115. end
  116.  
  117. unreported_records = (1..7).map do |i|
  118. BT1::Record.new(%w[unreported records])
  119. end
  120.  
  121. @store.update(reported_records + unreported_records)
  122.  
  123. fetched_records = @store.fetch(10)
  124. assert_equal 7, fetched_records.size
  125. fetched_records.each do |r|
  126. assert_equal false, r.reported?
  127. end
  128. end
  129.  
  130. test "Fetch should mark records reported once it has pulled them up" do
  131.  
  132. unreported_records = (1..10).map do |i|
  133. BT1::Record.new(%w[a bunch of new records])
  134. end
  135.  
  136. @store.update(unreported_records)
  137. @store.fetch(7)
  138.  
  139. reported = []
  140. unreported = []
  141.  
  142. @store.each do |r|
  143. if r.reported?
  144. reported << r
  145. else
  146. unreported << r
  147. end
  148. end
  149.  
  150. assert_equal 3, unreported.size
  151. assert_equal 7, reported.size
  152.  
  153. end
  154.  
  155. end
  156. end
Add Comment
Please, Sign In to add comment