Skip to content

Commit

Permalink
active flag on experiments derived from start and end times
Browse files Browse the repository at this point in the history
  • Loading branch information
timcowlishaw committed Aug 12, 2024
1 parent 402179b commit ad7a4dc
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 3 deletions.
5 changes: 5 additions & 0 deletions app/models/experiment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,9 @@ class Experiment < ApplicationRecord
def self.ransackable_attributes(auth_object = nil)
["created_at", "description", "ends_at", "id", "is_test", "name", "owner_id", "starts_at", "status", "updated_at"]
end


def active?
(!starts_at || Time.now >= starts_at) && (!ends_at || Time.now <= ends_at)
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class RemoveActiveFlagFromExperiments < ActiveRecord::Migration[6.1]
def change
remove_column :experiments, :active, :boolean
end
end
3 changes: 1 addition & 2 deletions db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 2024_07_18_054447) do
ActiveRecord::Schema.define(version: 2024_08_12_081108) do

# These are extensions that must be enabled in order to support this database
enable_extension "adminpack"
Expand Down Expand Up @@ -140,7 +140,6 @@
t.string "name", null: false
t.string "description"
t.bigint "owner_id"
t.boolean "active", default: true, null: false
t.boolean "is_test", default: false, null: false
t.datetime "starts_at"
t.datetime "ends_at"
Expand Down
1 change: 0 additions & 1 deletion spec/factories/experiment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
sequence("name") { |n| "experiment#{n}"}
description { "my experiment" }
association :owner, factory: :user
active { true }
is_test { false }
end
end
54 changes: 54 additions & 0 deletions spec/models/experiment_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
require "rails_helper"

RSpec.describe Experiment, type: :model do

describe "#is_active?" do
context "when the experiment has neither start or end times" do
it "is active" do
experiment = build(:experiment, starts_at: nil, ends_at: nil)
expect(experiment).to be_active
end
end

context "when the experiment has a start time but no end time" do
it "is inactive before the start time" do
experiment = build(:experiment, starts_at: Time.now + 1.hour, ends_at: nil)
expect(experiment).not_to be_active
end

it "is active after the start time" do
experiment = build(:experiment, starts_at: Time.now - 1.hour, ends_at: nil)
expect(experiment).to be_active
end
end

context "when the experiment has an end time but no start time" do
it "is active before the end time" do
experiment = build(:experiment, starts_at: nil, ends_at: Time.now + 1.hour)
expect(experiment).to be_active
end

it "is inactive after the end time" do
experiment = build(:experiment, starts_at: nil, ends_at: Time.now - 1.hour)
expect(experiment).not_to be_active
end
end

context "when the experiment has both start and end times" do
it "is inactive before the start time" do
experiment = build(:experiment, starts_at: Time.now + 1.hour, ends_at: Time.now + 2.hours)
expect(experiment).not_to be_active
end

it "is active between the start and end times" do
experiment = build(:experiment, starts_at: Time.now - 1.hour, ends_at: Time.now + 1.hour)
expect(experiment).to be_active
end

it "is inactive after the end time" do
experiment = build(:experiment, starts_at: Time.now - 2.hours, ends_at: Time.now - 1.hour)
expect(experiment).not_to be_active
end
end
end
end

0 comments on commit ad7a4dc

Please sign in to comment.