Example #1
0
        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);
        }