public async Task TestApiKey()
        {
            var addOne = await _index1.SaveObjectAsync(new SecuredApiKeyStub { ObjectID = "one" });

            var addTwo = await _index2.SaveObjectAsync(new SecuredApiKeyStub { ObjectID = "one" });

            addOne.Wait();
            addTwo.Wait();

            SecuredApiKeyRestriction restriction = new SecuredApiKeyRestriction
            {
                ValidUntil      = DateTime.UtcNow.AddMinutes(10).ToUnixTimeSeconds(),
                RestrictIndices = new List <string> {
                    _index1Name
                }
            };

            string key = BaseTest.SearchClient.GenerateSecuredApiKeys(TestHelper.SearchKey1, restriction);

            SearchClient clientWithRestriciton    = new SearchClient(TestHelper.ApplicationId1, key);
            SearchIndex  index1WithoutRestriction = clientWithRestriciton.InitIndex(_index1Name);
            SearchIndex  index2WithRestriction    = clientWithRestriciton.InitIndex(_index2Name);

            await index1WithoutRestriction.SearchAsync <SecuredApiKeyStub>(new Query());

            AlgoliaApiException ex = Assert.ThrowsAsync <AlgoliaApiException>(() =>
                                                                              index2WithRestriction.SearchAsync <SecuredApiKeyStub>(new Query()));

            Assert.That(ex.Message.Contains("Index not allowed with this API key"));
            Assert.That(ex.HttpErrorCode == 403);
        }
        public async Task SynonymsOperationsTest()
        {
            BatchIndexingResponse addObjectResponse =
                await _index.SaveObjectsAsync(_objectsToSave, autoGenerateObjectId : true);

            addObjectResponse.Wait();

            Synonym gba = new Synonym
            {
                ObjectID = "gba",
                Type     = SynonymType.Synonym,
                Synonyms = new List <string> {
                    "gba", "gameboy advance", "game boy advance"
                }
            };

            var regularSynonymResponse = await _index.SaveSynonymAsync(gba);

            Synonym wiiToWiiu = new Synonym
            {
                ObjectID = "wii_to_wii_u",
                Type     = SynonymType.OneWaySynonym,
                Input    = "wii",
                Synonyms = new List <string> {
                    "wii u"
                }
            };

            Synonym playstationPlaceholder = new Synonym
            {
                ObjectID     = "playstation_version_placeholder",
                Type         = SynonymType.Placeholder,
                Placeholder  = "<PLAYSTATIONVERSION>",
                Replacements = new List <string>
                {
                    "1",
                    "One",
                    "2",
                    "3",
                    "4",
                    "4 Pro"
                }
            };

            Synonym ps4 = new Synonym
            {
                ObjectID    = "ps4",
                Type        = SynonymType.AltCorrection1,
                Word        = "ps4",
                Corrections = new List <string> {
                    "playstation4"
                }
            };

            Synonym psone = new Synonym
            {
                ObjectID    = "psone",
                Type        = SynonymType.AltCorrection2,
                Word        = "psone",
                Corrections = new List <string> {
                    "playstationone"
                }
            };

            List <Synonym> synonyms = new List <Synonym> {
                wiiToWiiu, playstationPlaceholder, ps4, psone
            };

            var saveSynonymsResponse = await _index.SaveSynonymsAsync(synonyms);

            regularSynonymResponse.Wait();
            saveSynonymsResponse.Wait();

            // Retrieve the 5 added synonyms with getSynonym and check they are correctly retrieved
            var gbaTask = _index.GetSynonymAsync("gba");
            var wiiTask = _index.GetSynonymAsync("wii_to_wii_u");
            var playstationPlaceholderTask = _index.GetSynonymAsync("playstation_version_placeholder");
            var ps4Task   = _index.GetSynonymAsync("ps4");
            var psoneTask = _index.GetSynonymAsync("psone");

            Synonym[] tasks = await Task.WhenAll(gbaTask, wiiTask, playstationPlaceholderTask, ps4Task, psoneTask);

            Assert.True(TestHelper.AreObjectsEqual(gba, tasks[0]));
            Assert.True(TestHelper.AreObjectsEqual(wiiToWiiu, tasks[1]));
            Assert.True(TestHelper.AreObjectsEqual(playstationPlaceholder, tasks[2]));
            Assert.True(TestHelper.AreObjectsEqual(ps4, tasks[3]));
            Assert.True(TestHelper.AreObjectsEqual(psone, tasks[4]));

            // Perform a synonym search using searchSynonyms with an empty query, page 0 and hitsPerPage set to 10 and check that the returned synonyms are the same as the 5 originally saved
            SearchResponse <Synonym> searchResponse =
                await _index.SearchSynonymsAsync(new SynonymQuery { HitsPerPage = 10, Page = 0 });

            Assert.That(searchResponse.Hits, Has.Exactly(5).Items);

            // Instantiate a new SynonymIterator using newSynonymIterator and iterate over all the synonyms and check that those collected synonyms are the same as the 5 originally saved
            List <Synonym> synonymsFromIterator = new List <Synonym>();

            foreach (var synonym in new SynonymsIterator(_index))
            {
                synonymsFromIterator.Add(synonym);
            }

            Assert.True(TestHelper.AreObjectsEqual(gba, synonymsFromIterator.Find(s => s.ObjectID.Equals("gba"))));
            Assert.True(TestHelper.AreObjectsEqual(wiiToWiiu,
                                                   synonymsFromIterator.Find(s => s.ObjectID.Equals("wii_to_wii_u"))));
            Assert.True(TestHelper.AreObjectsEqual(playstationPlaceholder,
                                                   synonymsFromIterator.Find(s => s.ObjectID.Equals("playstation_version_placeholder"))));
            Assert.True(TestHelper.AreObjectsEqual(ps4, synonymsFromIterator.Find(s => s.ObjectID.Equals("ps4"))));
            Assert.True(TestHelper.AreObjectsEqual(psone, synonymsFromIterator.Find(s => s.ObjectID.Equals("psone"))));

            // Delete the synonym with objectID=”gba” using deleteSynonym and wait for the task to terminate using waitTask with the returned taskID
            var deleteGbaResponse = await _index.DeleteSynonymAsync("gba");

            deleteGbaResponse.Wait();

            // Try to get the synonym with getSynonym with objectID “gba” and check that the synonym does not exist anymore (404)
            AlgoliaApiException ex = Assert.ThrowsAsync <AlgoliaApiException>(() => _index.GetSynonymAsync("gba"));

            Assert.That(ex.HttpErrorCode, Is.EqualTo(404));

            // Clear all the synonyms using clearSynonyms and wait for the task to terminate using waitTask with the returned taskID
            var clearSynonymResponse = await _index.ClearSynonymsAsync();

            clearSynonymResponse.Wait();

            // Perform a synonym search using searchSynonyms with an empty query, page 0 and hitsPerPage set to 10 and check that the number of returned synonyms is equal to 0
            SearchResponse <Synonym> searchAfterClearResponse =
                await _index.SearchSynonymsAsync(new SynonymQuery { HitsPerPage = 10, Page = 0 });

            Assert.That(searchAfterClearResponse.Hits, Is.Empty);
        }
示例#3
0
        public async Task TestReplacing()
        {
            var addResponse = _index.SaveObjectAsync(new ReplaceAllTestObject {
                ObjectID = "one"
            });

            var ruleToSave = new Rule
            {
                ObjectID  = "one",
                Condition = new Condition {
                    Anchoring = "is", Pattern = "pattern"
                },
                Consequence = new Consequence
                {
                    Params = new ConsequenceParams
                    {
                        Query = new ConsequenceQuery
                        {
                            Edits = new List <Edit> {
                                new Edit {
                                    Type = EditType.Remove, Delete = "pattern"
                                }
                            }
                        }
                    }
                }
            };

            var saveRuleResponse = _index.SaveRuleAsync(ruleToSave);

            var synonymToSave = new Synonym
            {
                ObjectID = "one",
                Type     = SynonymType.Synonym,
                Synonyms = new List <string> {
                    "one", "two"
                }
            };

            var saveSynonymResponse = _index.SaveSynonymAsync(synonymToSave);

            Task.WaitAll(saveSynonymResponse, addResponse, saveRuleResponse);

            addResponse.Result.Wait();
            saveRuleResponse.Result.Wait();
            saveSynonymResponse.Result.Wait();

            var response = await _index.ReplaceAllObjectsAsync(new List <ReplaceAllTestObject>
            {
                new ReplaceAllTestObject {
                    ObjectID = "two"
                }
            });

            response.Wait();

            var ruleToSave2 = new Rule
            {
                ObjectID  = "two",
                Condition = new Condition {
                    Anchoring = "is", Pattern = "pattern"
                },
                Consequence = new Consequence
                {
                    Params = new ConsequenceParams
                    {
                        Query = new ConsequenceQuery
                        {
                            Edits = new List <Edit> {
                                new Edit {
                                    Type = EditType.Remove, Delete = "pattern"
                                }
                            }
                        }
                    }
                }
            };

            var replaceAllRulesResponse = await _index.ReplaceAllRulesAsync(new List <Rule> {
                ruleToSave2
            });

            var synonymToSave2 = new Synonym
            {
                ObjectID = "two",
                Type     = SynonymType.Synonym,
                Synonyms = new List <string> {
                    "one", "two"
                }
            };

            var replaceAllSynonymsResponse = await _index.ReplaceAllSynonymsAsync(new List <Synonym> {
                synonymToSave2
            });

            replaceAllRulesResponse.Wait();
            replaceAllSynonymsResponse.Wait();

            AlgoliaApiException getObjectEx =
                Assert.ThrowsAsync <AlgoliaApiException>(() => _index.GetObjectAsync <ReplaceAllTestObject>("one"));
            AlgoliaApiException getSynonymEx =
                Assert.ThrowsAsync <AlgoliaApiException>(() => _index.GetSynonymAsync("one"));
            AlgoliaApiException getRuleEx = Assert.ThrowsAsync <AlgoliaApiException>(() => _index.GetRuleAsync("one"));

            Assert.That(getObjectEx.HttpErrorCode, Is.EqualTo(404));
            Assert.That(getSynonymEx.HttpErrorCode, Is.EqualTo(404));
            Assert.That(getRuleEx.HttpErrorCode, Is.EqualTo(404));

            var ruleAfterReplace    = _index.GetRuleAsync("two");
            var synonymAfterReplace = _index.GetSynonymAsync("two");

            Task.WaitAll(ruleAfterReplace, synonymAfterReplace);

            Assert.True(TestHelper.AreObjectsEqual(ruleAfterReplace.Result, ruleToSave2));
            Assert.True(TestHelper.AreObjectsEqual(synonymAfterReplace.Result, synonymToSave2));
        }
示例#4
0
        public async Task TestAbTest()
        {
            var    now      = DateTime.UtcNow.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
            string testName = $"csharp-{now}-{Environment.UserName}";

            var abTests = await BaseTest.AnalyticsClient.GetABTestsAsync();

            if (abTests.ABTests != null)
            {
                var abTestsToDelete =
                    abTests.ABTests?.Where(x => x.Name.Contains("csharp-") && !x.Name.Contains($"csharp-{now}"));

                foreach (var item in abTestsToDelete)
                {
                    await BaseTest.AnalyticsClient.DeleteABTestAsync(item.AbTestId.Value);
                }
            }

            var addOne = await _index1.SaveObjectAsync(new AlgoliaStub { ObjectID = "one" });

            var addTwo = await _index2.SaveObjectAsync(new AlgoliaStub { ObjectID = "one" });

            // Create tomorrow datetime without seconds/ms to avoid test to fail
            DateTime utcNow   = DateTime.UtcNow.AddDays(1);
            DateTime tomorrow = new DateTime(utcNow.Year, utcNow.Month, utcNow.Day, utcNow.Hour, utcNow.Minute, 0,
                                             utcNow.Kind);

            var abTest = new ABTest
            {
                Name     = testName,
                Variants = new List <Variant>
                {
                    new Variant
                    {
                        Index = _index1Name, TrafficPercentage = 60, Description = "a description"
                    },
                    new Variant
                    {
                        Index = _index2Name, TrafficPercentage = 40, Description = string.Empty
                    }
                },
                EndAt = tomorrow
            };

            addOne.Wait();
            addTwo.Wait();

            AddABTestResponse addAbTest = await BaseTest.AnalyticsClient.AddABTestAsync(abTest);

            abTest.AbTestId = addAbTest.ABTestId;
            _index1.WaitTask(addAbTest.TaskID);

            ABTest abTestToCheck = await BaseTest.AnalyticsClient.GetABTestAsync(abTest.AbTestId.Value);

            Assert.IsTrue(TestHelper.AreObjectsEqual(abTestToCheck, abTest, "CreatedAt", "Status", "ClickCount", "ConversionCount"));
            Assert.IsFalse(abTestToCheck.Status.Equals("stopped"));

            ABTestsReponse listAbTests = await BaseTest.AnalyticsClient.GetABTestsAsync();

            Assert.IsTrue(listAbTests.ABTests.Any(x => x.AbTestId == abTest.AbTestId));
            Assert.IsTrue(TestHelper.AreObjectsEqual(
                              listAbTests.ABTests.FirstOrDefault(x => x.AbTestId == abTest.AbTestId), abTest, "CreatedAt", "Status", "ClickCount", "ConversionCount"));

            await BaseTest.AnalyticsClient.StopABTestAsync(abTest.AbTestId.Value);

            ABTest stoppedAbTest = await BaseTest.AnalyticsClient.GetABTestAsync(abTest.AbTestId.Value);

            Assert.IsTrue(stoppedAbTest.Status.Equals("stopped"));

            DeleteABTestResponse deleteAbTest = await BaseTest.AnalyticsClient.DeleteABTestAsync(abTest.AbTestId.Value);

            _index1.WaitTask(deleteAbTest.TaskID);

            AlgoliaApiException ex =
                Assert.ThrowsAsync <AlgoliaApiException>(() => BaseTest.AnalyticsClient.GetABTestAsync(abTest.AbTestId.Value));

            Assert.That(ex.HttpErrorCode == 404);
        }