diff --git a/src/Models/Activity.cs b/src/Models/Activity.cs index 998155c..ec17703 100644 --- a/src/Models/Activity.cs +++ b/src/Models/Activity.cs @@ -21,6 +21,7 @@ public class Activity : ActivityBase public string Object { get; set; } public string Target { get; set; } public string Origin { get; set; } + public Dictionary ScoreVars { get; set; } public Activity(string actor, string verb, string @object) { diff --git a/src/Models/GetOptions.cs b/src/Models/GetOptions.cs index e93f16d..b982b50 100644 --- a/src/Models/GetOptions.cs +++ b/src/Models/GetOptions.cs @@ -1,4 +1,5 @@ using Stream.Rest; +using Stream.Utils; using System.Collections.Generic; namespace Stream.Models @@ -17,6 +18,8 @@ public class GetOptions private string _endpoint = null; private string _feed_slug = null; private string _user_id = null; + private string _ranking_vars = null; + private bool _score_vars = false; private IDictionary _custom = null; @@ -56,6 +59,18 @@ public GetOptions WithRanking(string rankingSlug) return this; } + public GetOptions WithScoreVars() + { + _score_vars = true; + return this; + } + + public GetOptions WithRankingVars(IDictionary rankingVars) + { + _ranking_vars = StreamJsonConverter.SerializeObject(rankingVars); + return this; + } + public GetOptions WithSession(string session) { _session = session; @@ -111,6 +126,12 @@ internal void Apply(RestRequest request) if (!string.IsNullOrWhiteSpace(_user_id)) request.AddQueryParameter("user_id", _user_id); + if (!string.IsNullOrWhiteSpace(_ranking_vars)) + request.AddQueryParameter("ranking_vars", _ranking_vars); + + if (_score_vars) + request.AddQueryParameter("withScoreVars", "true"); + if (_custom != null) { foreach (KeyValuePair kvp in _custom) diff --git a/src/StreamFeed.cs b/src/StreamFeed.cs index e6d2ecb..e2693f2 100644 --- a/src/StreamFeed.cs +++ b/src/StreamFeed.cs @@ -43,7 +43,8 @@ internal StreamFeed(StreamClient client, string feedSlug, string userId) public async Task AddActivityAsync(Activity activity) { var request = _client.BuildFeedRequest(this, "/", HttpMethod.Post); - request.SetJsonBody(StreamJsonConverter.SerializeObject(activity)); + var body = StreamJsonConverter.SerializeObject(activity); + request.SetJsonBody(body); var response = await _client.MakeRequestAsync(request); diff --git a/tests/ActivityTests/GetActivityTests.cs b/tests/ActivityTests/GetActivityTests.cs index 96ce034..1c6b8b8 100644 --- a/tests/ActivityTests/GetActivityTests.cs +++ b/tests/ActivityTests/GetActivityTests.cs @@ -99,6 +99,58 @@ public async Task TestGetActivitiesByID() }); } + [Test] + [Ignore("Test database has no ranked method at the moment")] + public async Task TestRankingVars() + { + var newActivity1 = new Activity("1", "test", "1") + { + ForeignId = "r-test-1", + Time = DateTime.Parse("2000-08-16T16:32:32"), + }; + + newActivity1.SetData("popularity", 123); + + var response = await this.UserFeed.AddActivityAsync(newActivity1); + + var newActivity2 = new Activity("1", "test", "2") + { + ForeignId = "r-test-2", + Time = DateTime.Parse("2000-08-17T16:32:32"), + }; + + response = await this.UserFeed.AddActivityAsync(newActivity2); + + var ranking_vars = new Dictionary { { "popularity", 666 } }; + var r2 = await this.UserFeed.GetFlatActivitiesAsync(GetOptions.Default.WithLimit(2).WithRanking("popular").WithRankingVars(ranking_vars)); + Assert.NotNull(r2); + Assert.AreEqual(2, r2.Results.Count); + Assert.AreEqual(r2.Results[0].Score, 11.090528); + Assert.AreEqual(r2.Results[1].Score, 0.99999917); + } + + [Test] + [Ignore("Test database has no ranked method at the moment")] + public async Task TestScoreVars() + { + var feed = this.RankedFeed; + + var newActivity1 = new Activity("1", "test", "1") + { + ForeignId = "r-test-1", + Time = DateTime.Parse("2000-08-16T16:32:32"), + }; + + newActivity1.SetData("popularity", 123); + var r1 = await feed.AddActivityAsync(newActivity1); + + var r2 = await feed.GetFlatActivitiesAsync(GetOptions.Default.WithLimit(1).WithRanking("popularity").WithScoreVars()); + Assert.IsNotNull(r2.Results[0].ScoreVars); + + r2 = await feed.GetFlatActivitiesAsync(GetOptions.Default.WithLimit(1).WithRanking("popularity")); + Assert.IsNull(r2.Results[0].ScoreVars); + } + [Test] public async Task TestGetActivitiesByForeignIDAndTime() { diff --git a/tests/TestBase.cs b/tests/TestBase.cs index d109e90..aca8531 100644 --- a/tests/TestBase.cs +++ b/tests/TestBase.cs @@ -8,6 +8,7 @@ public abstract class TestBase protected IStreamClient Client { get; private set; } protected IStreamFeed UserFeed { get; private set; } protected IStreamFeed UserFeed2 { get; private set; } + protected IStreamFeed RankedFeed { get; private set; } protected IStreamFeed FlatFeed { get; private set; } protected IStreamFeed AggregateFeed { get; private set; } protected IStreamFeed NotificationFeed { get; private set; } @@ -21,6 +22,7 @@ public void Setup() FlatFeed = Client.Feed("flat", System.Guid.NewGuid().ToString()); AggregateFeed = Client.Feed("aggregate", System.Guid.NewGuid().ToString()); NotificationFeed = Client.Feed("notification", System.Guid.NewGuid().ToString()); + RankedFeed = Client.Feed("ranked", System.Guid.NewGuid().ToString()); } } } \ No newline at end of file