public void ReturnError_WhenMinMaxRatingsAreNullOrOutOfRange(int?minRating, int?maxRating)
            {
                var ratingRangeCreationResult = RatingRange.Create(minRating, maxRating);

                var expectedError = new Error
                {
                    Type    = ErrorType.RatingOutOfRange.ToString(),
                    Message = ErrorMessage.RatingOutOfRangeMessage
                };

                Assert.True(ratingRangeCreationResult.IsError);
                Assert.Equal(expectedError, ratingRangeCreationResult.Error);
            }
            public void ReturnError_WhenRatingsAreInRangeButMinRatingIsGreaterThanMaxRating(int?minRating, int?maxRating)
            {
                var ratingRangeCreationResult = RatingRange.Create(minRating, maxRating);

                var expectedError = new Error
                {
                    Type    = ErrorType.MinRatingGreaterThanMax.ToString(),
                    Message = ErrorMessage.MinRatingGreaterThanMax
                };

                Assert.True(ratingRangeCreationResult.IsError);
                Assert.Equal(expectedError, ratingRangeCreationResult.Error);
            }
            public void ReturnOk_WhenValidMinMaxRatingsAreGiven()
            {
                var minRating = new int?(1);
                var maxRating = new int?(5);

                var ratingRangeCreationResult = RatingRange.Create(minRating, maxRating);

                var expectedRatingRange = new RatingRange
                {
                    Min = minRating.Value,
                    Max = maxRating.Value
                };

                Assert.True(ratingRangeCreationResult.IsOk);
                Assert.Equal(expectedRatingRange, ratingRangeCreationResult.Value);
            }
예제 #4
0
            public void ShouldSetRatingRange()
            {
                var ratingRange = new RatingRange
                {
                    Min = 2,
                    Max = 4
                };

                var filter         = QueryFilter.By().Rating(ratingRange);
                var expectedFilter = new QueryFilter
                {
                    RatingRange = ratingRange
                };

                Assert.Equal(expectedFilter, filter);
            }
예제 #5
0
        private IEnumerable <ContestInfo> ParseContestInfosFromTable(IElement tbody)
        {
            foreach (var row in tbody.GetElementsByTagName("tr"))
            {
                var res = new ContestInfo();

                var tds         = row.GetElementsByTagName("td");
                var dateTimeStr = tds[0].FirstElementChild.GetAttribute("href").Split('?')[1].Substring(4, 13);
                res.StartTime = DateTime.ParseExact(dateTimeStr, "yyyyMMddTHHmm", null).AddHours(-9);

                var contestAnchor = tds[1].GetElementsByTagName("a")[0];
                res.ContestName       = contestAnchor.TextContent;
                res.ContestScreenName = contestAnchor.GetAttribute("href").Split('/').Last();

                var durationHourAndMin = tds[2].TextContent.Split(':');
                res.Duration = new TimeSpan(int.Parse(durationHourAndMin[0]), int.Parse(durationHourAndMin[1]), 0);

                var ratedRange = tds[3].TextContent;
                res.RatedRange = RatingRange.Parse(ratedRange);

                yield return(res);
            }
        }
예제 #6
0
        public Photo [] Query(Term searchexpression, string extraCondition, DateRange range, RollSet importidrange, RatingRange ratingrange)
        {
            bool hide = (extraCondition == null);

            // The SQL query that we want to construct is:
            //
            // SELECT photos.id
            //        photos.time
            //        photos.uri,
            //        photos.description,
            //        photos.roll_id,
            //        photos.default_version_id
            //        photos.rating
            //                  FROM photos, photo_tags
            //                  WHERE photos.time >= time1 AND photos.time <= time2
            //                              AND photos.rating >= rat1 AND photos.rating <= rat2
            //                              AND photos.id NOT IN (select photo_id FROM photo_tags WHERE tag_id = HIDDEN)
            //                              AND photos.id IN (select photo_id FROM photo_tags where tag_id IN (tag1, tag2..)
            //                              AND extra_condition_string
            //                  GROUP BY photos.id

            var query_builder = new StringBuilder();
            var where_clauses = new List <string> ();

            query_builder.Append("SELECT id, " +
                                 "time, " +
                                 "base_uri, " +
                                 "filename, " +
                                 "description, " +
                                 "roll_id, " +
                                 "default_version_id, " +
                                 "rating " +
                                 "FROM photos ");

            if (range != null)
            {
                where_clauses.Add(String.Format("time >= {0} AND time <= {1}",
                                                DateTimeUtil.FromDateTime(range.Start),
                                                DateTimeUtil.FromDateTime(range.End)));
            }

            if (ratingrange != null)
            {
                where_clauses.Add(ratingrange.SqlClause());
            }

            if (importidrange != null)
            {
                where_clauses.Add(importidrange.SqlClause());
            }

            if (hide && App.Instance.Database.Tags.Hidden != null)
            {
                where_clauses.Add(String.Format("id NOT IN (SELECT photo_id FROM photo_tags WHERE tag_id = {0})",
                                                App.Instance.Database.Tags.Hidden.Id));
            }

            if (searchexpression != null)
            {
                where_clauses.Add(searchexpression.SqlCondition());
            }

            if (extraCondition != null && extraCondition.Trim() != String.Empty)
            {
                where_clauses.Add(extraCondition);
            }

            if (where_clauses.Count > 0)
            {
                query_builder.Append(" WHERE ");
                query_builder.Append(String.Join(" AND ", where_clauses.ToArray()));
            }

            query_builder.Append(" ORDER BY time");
            return(Query(query_builder.ToString()));
        }
예제 #7
0
 public Photo [] Query(Tag [] tags, string extraCondition, DateRange range, RollSet importidrange, RatingRange ratingrange)
 {
     return(Query(OrTerm.FromTags(tags), extraCondition, range, importidrange, ratingrange));
 }
예제 #8
0
 public RatingRangeCondition(RatingRange value) => _range = value;
예제 #9
0
    public void QueryToTemp(string temp_table, Term searchexpression, string extra_condition, DateRange range, RollSet importidrange, RatingRange ratingrange, OrderByTime orderbytime)
    {
        bool hide = (extra_condition == null);

        // The SQL query that we want to construct is:
        //
        // SELECT photos.id
        //        photos.time
        //        photos.uri,
        //        photos.description,
        //	  photos.roll_id,
        //        photos.default_version_id
        //        photos.rating
        //                  FROM photos, photo_tags
        //		    WHERE photos.time >= time1 AND photos.time <= time2
        //				AND photos.rating >= rat1 AND photos.rating <= rat2
        //				AND photos.id NOT IN (select photo_id FROM photo_tags WHERE tag_id = HIDDEN)
        //				AND photos.id IN (select photo_id FROM photo_tags where tag_id IN (tag1, tag2..)
        //				AND extra_condition_string
        //                  GROUP BY photos.id

        StringBuilder query_builder = new StringBuilder();
        ArrayList     where_clauses = new ArrayList();

        query_builder.Append("SELECT id, " +
                             "time, " +
                             "uri, " +
                             "description, " +
                             "roll_id, " +
                             "default_version_id, " +
                             "rating, " +
                             "md5_sum " +
                             "FROM photos ");

        if (range != null)
        {
            where_clauses.Add(String.Format("time >= {0} AND time <= {1}",
                                            DbUtils.UnixTimeFromDateTime(range.Start),
                                            DbUtils.UnixTimeFromDateTime(range.End)));
        }

        if (ratingrange != null)
        {
            where_clauses.Add(ratingrange.SqlClause());
        }

        if (importidrange != null)
        {
            where_clauses.Add(importidrange.SqlClause());
        }

        if (hide && Core.Database.Tags.Hidden != null)
        {
            where_clauses.Add(String.Format("id NOT IN (SELECT photo_id FROM photo_tags WHERE tag_id = {0})",
                                            FSpot.Core.Database.Tags.Hidden.Id));
        }

        if (searchexpression != null)
        {
            where_clauses.Add(searchexpression.SqlCondition());
        }

        if (extra_condition != null && extra_condition.Trim() != String.Empty)
        {
            where_clauses.Add(extra_condition);
        }

        if (where_clauses.Count > 0)
        {
            query_builder.Append(" WHERE ");
            query_builder.Append(String.Join(" AND ", ((String [])where_clauses.ToArray(typeof(String)))));
        }
        query_builder.Append(" ORDER BY ");
        query_builder.Append(orderbytime.SqlClause());
        QueryToTemp(temp_table, query_builder.ToString());
    }
예제 #10
0
 public void QueryToTemp(string temp_table, Tag [] tags, string extra_condition, DateRange range, RollSet importidrange, RatingRange ratingrange, OrderByTime orderbytime)
 {
     QueryToTemp(temp_table, FSpot.OrTerm.FromTags(tags), extra_condition, range, importidrange, ratingrange, orderbytime);
 }