require("plenary.async").tests.add_to_env()

a.describe("a.before_each", function()
  local counter = 0

  local set_counter_to_one = a.wrap(function(callback)
    a.util.sleep(5)
    counter = 1
  end, 1)

  a.before_each(a.void(function()
    set_counter_to_one()
  end))

  a.it("should run in async context", function()
    counter = counter + 1
    assert.are.same(counter, 2)
  end)

  a.it("should run for all tests", function()
    counter = counter + 2
    assert.are.same(counter, 3)
  end)
end)

a.describe("a.after_each", function()
  local counter = 0

  local set_counter_to_one = a.wrap(function(callback)
    a.util.sleep(5)
    counter = 1
  end, 1)

  a.after_each(a.void(function()
    set_counter_to_one()
  end))

  a.it("should not run before first test", function()
    counter = counter + 1
    assert.are.same(counter, 1)
  end)

  a.it("should run before the second test", function()
    counter = counter + 2
    assert.are.same(counter, 3)
  end)

  a.it("should run before the third test", function()
    counter = counter + 3
    assert.are.same(counter, 4)
  end)
end)