예제 #1
0
        public void WishlistSearchRequest_Instantiates_Properly(string text, int token)
        {
            var a = new WishlistSearchRequest(text, token);

            Assert.Equal(text, a.SearchText);
            Assert.Equal(token, a.Token);
        }
예제 #2
0
        public void WishlistSearchRequest_Constructs_The_Correct_Message(string text, int token)
        {
            var a   = new WishlistSearchRequest(text, token);
            var msg = a.ToByteArray();

            var reader = new MessageReader <MessageCode.Server>(msg);
            var code   = reader.ReadCode();

            Assert.Equal(MessageCode.Server.WishlistSearch, code);
            Assert.Equal(4 + 4 + 4 + 4 + text.Length, msg.Length);
            Assert.Equal(token, reader.ReadInteger());
            Assert.Equal(text, reader.ReadString());
        }
        public async Task <ApiResponse <List <Guid> > > PostAsync(WishlistSearchRequest searchRequest)
        {
            Validator.For(searchRequest, "searchRequest").IsNotNull();
            Validator.For(searchRequest.TimeInterval, "TimeInterval").InRange(0, 30);
            Validator.For(searchRequest.MaxDistance, "MaxDistance").InRange(0, 1);

            if (searchRequest.Location != null)
            {
                Validator.For(searchRequest.Location.Latitude, "Latitude").InRange(-90, 90);
                Validator.For(searchRequest.Location.Longitude, "Longitude").InRange(-180, 180);
            }

            string path = "/pii/wishlistsearch";

            using (var response = await Client.PostAsJsonAsync(path, searchRequest).ConfigureAwait(false))
            {
                return(await response.Content.ReadAsAsync <ApiResponse <List <Guid> > >().ConfigureAwait(false));
            }
        }
예제 #4
0
        public async Task SearchAsync_Sends_WishlistSearchRequest_Given_Wishlist_Scope(string searchText, int token)
        {
            var expected = new WishlistSearchRequest(searchText, token).ToByteArray();

            using (var cts = new CancellationTokenSource(1000))
            {
                var conn = new Mock <IMessageConnection>();
                conn.Setup(m => m.WriteAsync(It.IsAny <byte[]>(), It.IsAny <CancellationToken?>()))
                .Callback(() => cts.Cancel());

                using (var s = new SoulseekClient(serverConnection: conn.Object))
                {
                    s.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);

                    await Record.ExceptionAsync(() =>
                                                s.SearchAsync(SearchQuery.FromText(searchText), SearchScope.Wishlist, token, cancellationToken: cts.Token));
                }

                conn.Verify(m => m.WriteAsync(It.Is <byte[]>(msg => msg.Matches(expected)), It.IsAny <CancellationToken?>()), Times.Once);
            }
        }