public override bool Equals(object obj) { StringIdMovie other = obj as StringIdMovie; if (other == null) { return(false); } if (this.Title != other.Title) { return(false); } if (this.Duration != other.Duration) { return(false); } if (this.MPAARating != other.MPAARating) { return(false); } if (!this.ReleaseDate.ToUniversalTime().Equals(other.ReleaseDate.ToUniversalTime())) { return(false); } if (this.BestPictureWinner != other.BestPictureWinner) { return(false); } if (this.Year != other.Year) { return(false); } return(true); }
private static ZumoTest CreateTypedApiTest(Random seedGenerator, TypedTestType testType) { string testName = "Typed overload - " + testType; return new ZumoTest(testName, async delegate(ZumoTest test) { var client = ZumoTestGlobals.Instance.Client; var apiName = MovieFinderApiName; var testResult = true; for (int i = 0; i < 10; i++) { int seed = seedGenerator.Next(); test.AddLog("Test with seed = {0}", seed); Random rndGen = new Random(seed); StringIdMovie[] expectedResult = null; AllStringIdMovies actualResult = null; StringIdMovie inputTemplate = ZumoQueryTestData.AllStringIdMovies()[rndGen.Next(ZumoQueryTestData.AllStringIdMovies().Length)]; test.AddLog("Using movie '{0}' as template", inputTemplate.Title); string apiUrl; switch (testType) { case TypedTestType.GetByTitle: apiUrl = apiName + "/title/" + inputTemplate.Title; expectedResult = new StringIdMovie[] { inputTemplate }; actualResult = await client.InvokeApiAsync<AllStringIdMovies>(apiUrl, HttpMethod.Get, null); break; case TypedTestType.GetByDate: var releaseDate = inputTemplate.ReleaseDate; apiUrl = apiName + "/date/" + releaseDate.Year + "/" + releaseDate.Month + "/" + releaseDate.Day; expectedResult = ZumoQueryTestData.AllStringIdMovies().Where(m => m.ReleaseDate == releaseDate).ToArray(); actualResult = await client.InvokeApiAsync<AllStringIdMovies>(apiUrl, HttpMethod.Get, null); break; case TypedTestType.PostByDuration: case TypedTestType.PostByYear: string orderBy = null; switch (rndGen.Next(3)) { case 0: orderBy = null; break; case 1: orderBy = "id"; break; case 2: orderBy = "Title"; break; } Dictionary<string, string> queryParams = orderBy == null ? null : new Dictionary<string, string> { { "orderBy", orderBy } }; Func<StringIdMovie, bool> predicate; if (testType == TypedTestType.PostByYear) { predicate = m => m.Year == inputTemplate.Year; apiUrl = apiName + "/moviesOnSameYear"; } else { predicate = m => m.Duration == inputTemplate.Duration; apiUrl = apiName + "/moviesWithSameDuration"; } if (queryParams == null) { actualResult = await client.InvokeApiAsync<StringIdMovie, AllStringIdMovies>(apiUrl, inputTemplate); } else { actualResult = await client.InvokeApiAsync<StringIdMovie, AllStringIdMovies>(apiUrl, inputTemplate, HttpMethod.Post, queryParams); } expectedResult = ZumoQueryTestData.AllStringIdMovies().Where(predicate).ToArray(); if (orderBy == null || orderBy == "Title") { Array.Sort(expectedResult, (m1, m2) => m1.Title.CompareTo(m2.Title)); } break; default: throw new ArgumentException("Invalid test type: " + testType); } test.AddLog(" - Sent request to {0}", apiUrl); List<string> errors = new List<string>(); if (Util.CompareArrays(expectedResult, actualResult.Movies, errors)) { test.AddLog(" - Result is expected"); } else { foreach (var error in errors) { test.AddLog(" - {0}", error); } test.AddLog("Expected: {0}", string.Join(", ", expectedResult.Select(m => m.Title))); test.AddLog("Actual: {0}", string.Join(", ", actualResult.Movies.Select(m => m.Title))); testResult = false; break; } } return testResult; }, ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES); }