import com.bazaarvoice.admanagement.api.IntegrationSpec import com.bazaarvoice.admanagement.core.time.UTCDate case class Campaign(id: String, name: String, client: String, startDate: UTCDate, endDate: UTCDate, deleted: Boolean) case class UpdateParameters(name:Option[String] = None, client:Option[String] = None, startDate: Option[UTCDate] = None, endDate: Option[UTCDate] = None, deleted: Option[Boolean] = None) class Database { def storeCampaign(campaign: Campaign): Campaign = ??? def fetchCampaign(id: String): Campaign = ??? def updateCampaign(id: String, updateParameters: UpdateParameters): Campaign = ??? } class MyCampaign extends IntegrationSpec { val database = new Database it should "properly store a single campaign" in { Given("we have a proper campaign") val campaignToStore = Campaign( id = "someId", name = "someName", client = "someClient", startDate = UTCDate(1955, 10, 6), endDate = UTCDate(1956, 10, 6), deleted = false) And("we store this campaign in the database") database.storeCampaign(campaignToStore) When("we fetch a given campaign") val fetchedCampaign:Campaign = database.fetchCampaign("someId") Then("All the campaign values were stored properly") fetchedCampaign.id shouldBe campaignToStore.id fetchedCampaign.name shouldBe campaignToStore.name fetchedCampaign.client shouldBe campaignToStore.client fetchedCampaign.startDate shouldBe campaignToStore.startDate fetchedCampaign.endDate shouldBe campaignToStore.endDate fetchedCampaign.deleted shouldBe campaignToStore.deleted } it should "properly update a single campaign" in { Given("we have a proper campaign") val campaignToStore = Campaign( id = "someId", name = "someName", client = "someClient", startDate = UTCDate(1955, 10, 6), endDate = UTCDate(1956, 10, 6), deleted = false) And("some update parameters for our campaign") val updateParameters = UpdateParameters(name = Some("someNewName")) And("we store this campaign in the database") database.storeCampaign(campaignToStore) When("we update this campaign") database.updateCampaign("someId", updateParameters) val fetchedCampaign:Campaign = database.fetchCampaign("someId") Then("All the campaign values were stored properly") //Unchanged values fetchedCampaign.id shouldBe campaignToStore.id fetchedCampaign.client shouldBe campaignToStore.client fetchedCampaign.startDate shouldBe campaignToStore.startDate fetchedCampaign.endDate shouldBe campaignToStore.endDate fetchedCampaign.deleted shouldBe campaignToStore.deleted //Changed values fetchedCampaign.name shouldBe updateParameters.name } }