diff --git a/openc3/lib/openc3/models/activity_model.rb b/openc3/lib/openc3/models/activity_model.rb index 097a599dc1..1a67ef7d40 100644 --- a/openc3/lib/openc3/models/activity_model.rb +++ b/openc3/lib/openc3/models/activity_model.rb @@ -47,11 +47,7 @@ def self.activities(name:, scope:) start_score = now - 15 stop_score = (now + 3660) array = Store.zrangebyscore("#{scope}#{PRIMARY_KEY}__#{name}", start_score, stop_score) - ret_array = Array.new - array.each do |value| - ret_array << ActivityModel.from_json(value, name: name, scope: scope) - end - return ret_array + return array.map { |value| ActivityModel.from_json(value, name: name, scope: scope) } end # @return [Array|nil] Array up to 100 of this model or empty array if name not found under primary_key @@ -59,32 +55,20 @@ def self.get(name:, start:, stop:, scope:, limit: 100) if start > stop raise ActivityInputError.new "start: #{start} must be before stop: #{stop}" end - array = Store.zrangebyscore("#{scope}#{PRIMARY_KEY}__#{name}", start, stop, :limit => [0, limit]) - ret_array = Array.new - array.each do |value| - ret_array << JSON.parse(value, :allow_nan => true, :create_additions => true) - end - return ret_array + return array.map { |value| JSON.parse(value, :allow_nan => true, :create_additions => true) } end # @return [Array] Array up to the limit of the models (as Hash objects) stored under the primary key def self.all(name:, scope:, limit: 100) array = Store.zrange("#{scope}#{PRIMARY_KEY}__#{name}", 0, -1, :limit => [0, limit]) - ret_array = Array.new - array.each do |value| - ret_array << JSON.parse(value, :allow_nan => true, :create_additions => true) - end - return ret_array + return array.map { |value| JSON.parse(value, :allow_nan => true, :create_additions => true) } end # @return [String|nil] String of the saved json or nil if score not found under primary_key def self.score(name:, score:, scope:) array = Store.zrangebyscore("#{scope}#{PRIMARY_KEY}__#{name}", score, score, :limit => [0, 1]) - array.each do |value| - return ActivityModel.from_json(value, name: name, scope: scope) - end - return nil + return array.map { |value| ActivityModel.from_json(value, name: name, scope: scope) } end # @return [Integer] count of the members stored under the primary key @@ -129,7 +113,7 @@ def self.from_json(json, name:, scope:) self.new(**json.transform_keys(&:to_sym), name: name, scope: scope) end - attr_reader :start, :stop, :kind, :data, :events, :fulfillment, :recurring + attr_reader :start, :stop, :kind, :data, :fulfillment, :events, :uuid, :recurring def initialize( name:, @@ -141,16 +125,18 @@ def initialize( updated_at: 0, fulfillment: nil, events: nil, + uuid: nil, recurring: {} ) super("#{scope}#{PRIMARY_KEY}__#{name}", name: name, scope: scope) set_input( - fulfillment: fulfillment, start: start, stop: stop, kind: kind, data: data, + fulfillment: fulfillment, events: events, + uuid: uuid, recurring: recurring, ) @updated_at = updated_at @@ -218,15 +204,16 @@ def validate_input(start:, stop:, kind:, data:) end # Set the values of the instance, @start, @kind, @data, @events... - def set_input(start:, stop:, kind: nil, data: nil, events: nil, fulfillment: nil, recurring: nil) + def set_input(start:, stop:, kind: nil, data: nil, fulfillment: nil, events: nil, uuid: nil, recurring: nil) kind = kind.to_s.downcase validate_input(start: start, stop: stop, kind: kind, data: data) @start = start @stop = stop - @fulfillment = fulfillment.nil? ? false : fulfillment @kind = kind @data = data.nil? ? @data : data + @fulfillment = fulfillment.nil? ? false : fulfillment @events = events.nil? ? Array.new : events + @uuid = SecureRandom.uuid unless uuid @recurring = recurring.nil? ? @recurring : recurring end @@ -402,6 +389,7 @@ def as_json(*a) 'fulfillment' => @fulfillment, 'start' => @start, 'stop' => @stop, + 'uuid' => @uuid, 'kind' => @kind, 'events' => @events, 'data' => @data.as_json(*a), diff --git a/playwright/tests/command-sender.spec.ts b/playwright/tests/command-sender.spec.ts index 00286ab7ad..d0228de9d3 100644 --- a/playwright/tests/command-sender.spec.ts +++ b/playwright/tests/command-sender.spec.ts @@ -391,6 +391,8 @@ test('executes commands from history', async ({ page, utils }) => { // Reload page and verify history still exists await page.reload() + await expect(page.locator('.v-app-bar')).toContainText('Command Sender') + await utils.sleep(500) await checkHistory(page, 'cmd("INST CLEAR")') await checkHistory( page, @@ -509,6 +511,14 @@ test('ignores normal range checks', async ({ page, utils }) => { .locator('[data-test="sender-history"]') .press('ControlOrMeta+ArrowRight') await utils.sleep(100) + await page + .locator('[data-test="sender-history"]') + .press('ControlOrMeta+ArrowRight') + await utils.sleep(100) + await page + .locator('[data-test="sender-history"]') + .press('ControlOrMeta+ArrowRight') + await utils.sleep(100) await page.locator('[data-test="sender-history"]').press('ArrowLeft') await utils.sleep(100) await page.locator('[data-test="sender-history"]').press('ArrowLeft')