func TestFields(t *testing.T) {
	query := types.NewInsightsV3Query()

	Convey("SetFieldsCorrectly", t, func() {
		Convey("Should set single field correctly", func() {
			query.AddField("testField")

			// we've only added a single field
			So(len(query.Fields), ShouldEqual, 1)
		})

		Convey("Should set multiple fields correctly", func() {
			query.AddFields([]string{"test1", "test2"})

			// added a single field before, now adding another two.. 1 + 2 = 3 :)
			So(len(query.Fields), ShouldEqual, 3)
		})

		Convey("Shouldn't allow duplicates", func() {
			query.AddField("test2")

			So(len(query.Fields), ShouldEqual, 3)
		})
		Convey("Should convert to JSON properly", func() {
			json := query.String()

			// test that the json got generated correctly
			So(json, ShouldContainSubstring, `"fields":["testField","test1","test2"]`)
		})
	})
}
func TestFilters(t *testing.T) {
	query := types.NewInsightsV3Query()

	Convey("QueryFilters", t, func() {
		Convey("Add a filter group", func() {
			query.AddFilters(types.NewInsightsV3FilterGroup())
			So(len(query.Filters), ShouldEqual, 1)

			query.AddFilters(types.NewInsightsV3FilterGroup())
			So(len(query.Filters), ShouldEqual, 2)
		})
	})
}
func TestTimeSet(t *testing.T) {
	query := types.NewInsightsV3Query()

	Convey("SetTimeCorrectly", t, func() {
		Convey("Be able to set the time", func() {
			time := types.NewInsightsV3Time()

			time.WindowSize = "hour"

			query.SetReportTime(time)

			So(query.Time.WindowSize, ShouldEqual, "hour")
		})
	})
}
func TestDimensions(t *testing.T) {
	query := types.NewInsightsV3Query()

	Convey("WorkWithDimensions", t, func() {
		Convey("Be able to set Dimension1", func() {
			query.SetDimension1("action_agent")

			So(query.Dimension1, ShouldEqual, "action_agent")
		})

		Convey("Should be able to set Dimension1Value", func() {
			query.SetDimension1Values("test")

			So(query.Dimension1Values, ShouldEqual, "test")
		})

		Convey("Should be able to set Dimension2", func() {
			query.SetDimension2("test2")

			So(query.Dimension2, ShouldEqual, "test2")
		})

		Convey("Should be able to set Dimension2Values", func() {
			query.SetDimension2Values("test3")

			So(query.Dimension2Values, ShouldEqual, "test3")
		})

		Convey("Should convert to JSON correctly", func() {
			json := query.String()

			So(json, ShouldContainSubstring, `"dimension1":"action_agent"`)
			So(json, ShouldContainSubstring, `"dimension1_values":"test"`)
			So(json, ShouldContainSubstring, `"dimension2":"test2"`)
			So(json, ShouldContainSubstring, `"dimension2_values":"test3"`)
		})
	})
}