Beispiel #1
0
        public void Items_without_pageid_are_not_affected_by_filtering()
        {
            MockPlug.Setup(_authUri).Verb("POST").ExpectCalls(Times.Never());
            var items = new[] {
                Result(1, null),
                Result(2, null),
            };
            var set = LuceneResultFilter.Filter(_authPlug, items, 0, int.MaxValue, new Result <IList <LuceneResult> >()).Wait();

            Assert.AreEqual(2, set.Count);
            Assert.AreEqual(items[0], set[0]);
            MockPlug.VerifyAll(1.Seconds());
        }
Beispiel #2
0
        public void Can_apply_limit()
        {
            MockPlug.Setup(_authUri)
            .Verb("POST")
            .Returns(DreamMessage.Ok(MimeType.TEXT, ""));
            var items = new[] {
                Result(1),
                Result(2),
            };
            var set = LuceneResultFilter.Filter(_authPlug, items, 0, 1, new Result <IList <LuceneResult> >()).Wait();

            Assert.AreEqual(1, set.Count);
            Assert.AreEqual(items[0], set[0]);
        }
Beispiel #3
0
        public void Limit_smaller_than_item_set_forces_authorization_in_chunks_as_candidates_nears_limit()
        {
            var items = new List <LuceneResult>();

            for (var i = 1; i <= 200; i++)
            {
                items.Add(Result(i));
            }

            // first chunk should ask for 50 ids and we'll filter 20 from that set
            MockPlug.Setup(_authUri)
            .Verb("POST")
            .WithMessage(m => {
                var t     = m.ToText();
                var match = t.EqualsInvariant(items.Select(x => x.PageId.Value).Take(50).ToCommaDelimitedString());
                _log.DebugFormat("first chunk match? {0} => {1}", match, t);
                return(match);
            })
            .Returns(DreamMessage.Ok(MimeType.TEXT, S(10, 39).ToCommaDelimitedString()))
            .ExpectCalls(Times.Once());

            // second chunk should ask for 30 and we'll filter 5 from that set
            // which gives it a total larger than our limit, i.e. it won't try for a third chunk
            MockPlug.Setup(_authUri)
            .Verb("POST")
            .WithMessage(m => {
                var t     = m.ToText();
                var match = t.EqualsInvariant(items.Select(x => x.PageId.Value).Skip(50).Take(30).ToCommaDelimitedString());
                _log.DebugFormat("second chunk match? {0} => {1}", match, t);
                return(match);
            })
            .Returns(DreamMessage.Ok(MimeType.TEXT, S(51, 55).ToCommaDelimitedString()))
            .ExpectCalls(Times.Once());
            var builder = new LuceneResultFilter(_authPlug, 10000, 20);
            var set     = Coroutine.Invoke(builder.Filter, items, 0, 30, new Result <IList <LuceneResult> >()).Wait();

            Assert.AreEqual(30, set.Count);

            // we expect a sequence of 1-9,40-50,56-... and take the first 30
            var expected = S(1, 9).Union(S(40, 50)).Union(S(56, 100)).Take(30);

            Assert.AreEqual(
                expected.ToCommaDelimitedString(),
                set.Select(x => x.PageId.Value).ToCommaDelimitedString()
                );
            MockPlug.VerifyAll(1.Seconds());
        }
Beispiel #4
0
        public void Items_are_filtered_by_pageId()
        {
            MockPlug.Setup(_authUri)
            .Verb("POST")
            .WithMessage(m => {
                var t = m.ToText();
                return(t.EqualsInvariant("1,2"));
            })
            .Returns(DreamMessage.Ok(MimeType.TEXT, "1"))
            .ExpectCalls(Times.Once());
            var items = new[] {
                Result(1),
                Result(2),
            };
            var set = LuceneResultFilter.Filter(_authPlug, items, 0, int.MaxValue, new Result <IList <LuceneResult> >()).Wait();

            Assert.AreEqual(1, set.Count);
            Assert.AreEqual(items[1], set[0]);
            MockPlug.VerifyAll(1.Seconds());
        }
Beispiel #5
0
        public void Item_sets_larger_than_maxAuthItems_are_authorized_in_chunks()
        {
            var items = new List <LuceneResult>();

            for (var i = 1; i <= 50; i++)
            {
                items.Add(Result(i));
            }
            MockPlug.Setup(_authUri)
            .Verb("POST")
            .WithMessage(m => {
                var t     = m.ToText();
                var match = t.EqualsInvariant(items.Select(x => x.PageId.Value).Take(30).ToCommaDelimitedString());
                _log.DebugFormat("first chunk match? {0} => {1}", match, t);
                return(match);
            })
            .Returns(DreamMessage.Ok(MimeType.TEXT, ""))
            .ExpectCalls(Times.Once());
            MockPlug.Setup(_authUri)
            .Verb("POST")
            .WithMessage(m => {
                var t     = m.ToText();
                var match = t.EqualsInvariant(items.Select(x => x.PageId.Value).Skip(30).ToCommaDelimitedString());
                _log.DebugFormat("second chunk match? {0} => {1}", match, t);
                return(match);
            })
            .Returns(DreamMessage.Ok(MimeType.TEXT, ""))
            .ExpectCalls(Times.Once());
            var builder = new LuceneResultFilter(_authPlug, 30, 1000);
            var set     = Coroutine.Invoke(builder.Filter, items, 0, int.MaxValue, new Result <IList <LuceneResult> >()).Wait();

            Assert.AreEqual(items.Count, set.Count);
            Assert.AreEqual(
                items.Select(x => x.PageId.Value).ToCommaDelimitedString(),
                set.Select(x => x.PageId.Value).ToCommaDelimitedString()
                );
            MockPlug.VerifyAll(1.Seconds());
        }