mirror of https://github.com/ppy/osu
Update score submission serialisation tests to use `SubmittableScore`
This commit is contained in:
parent
cd7bd935f6
commit
f68d6dbc8f
|
@ -8,6 +8,7 @@
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Configuration;
|
using osu.Game.Configuration;
|
||||||
using osu.Game.Online.API;
|
using osu.Game.Online.API;
|
||||||
|
using osu.Game.Online.Solo;
|
||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
using osu.Game.Rulesets.Difficulty;
|
using osu.Game.Rulesets.Difficulty;
|
||||||
using osu.Game.Rulesets.Mods;
|
using osu.Game.Rulesets.Mods;
|
||||||
|
@ -88,33 +89,27 @@ public void TestDeserialiseDifficultyAdjustModWithExtendedLimits()
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestDeserialiseScoreInfoWithEmptyMods()
|
public void TestDeserialiseSubmittableScoreWithEmptyMods()
|
||||||
{
|
{
|
||||||
var score = new ScoreInfo { Ruleset = new OsuRuleset().RulesetInfo };
|
var score = new SubmittableScore(new ScoreInfo { Ruleset = new OsuRuleset().RulesetInfo });
|
||||||
|
|
||||||
var deserialised = JsonConvert.DeserializeObject<ScoreInfo>(JsonConvert.SerializeObject(score));
|
var deserialised = JsonConvert.DeserializeObject<SubmittableScore>(JsonConvert.SerializeObject(score));
|
||||||
|
|
||||||
if (deserialised != null)
|
|
||||||
deserialised.Ruleset = new OsuRuleset().RulesetInfo;
|
|
||||||
|
|
||||||
Assert.That(deserialised?.Mods.Length, Is.Zero);
|
Assert.That(deserialised?.Mods.Length, Is.Zero);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestDeserialiseScoreInfoWithCustomModSetting()
|
public void TestDeserialiseSubmittableScoreWithCustomModSetting()
|
||||||
{
|
{
|
||||||
var score = new ScoreInfo
|
var score = new SubmittableScore(new ScoreInfo
|
||||||
{
|
{
|
||||||
Ruleset = new OsuRuleset().RulesetInfo,
|
Ruleset = new OsuRuleset().RulesetInfo,
|
||||||
Mods = new Mod[] { new OsuModDoubleTime { SpeedChange = { Value = 2 } } }
|
Mods = new Mod[] { new OsuModDoubleTime { SpeedChange = { Value = 2 } } }
|
||||||
};
|
});
|
||||||
|
|
||||||
var deserialised = JsonConvert.DeserializeObject<ScoreInfo>(JsonConvert.SerializeObject(score));
|
var deserialised = JsonConvert.DeserializeObject<SubmittableScore>(JsonConvert.SerializeObject(score));
|
||||||
|
|
||||||
if (deserialised != null)
|
Assert.That((deserialised?.Mods[0])?.Settings["speed_change"], Is.EqualTo(2));
|
||||||
deserialised.Ruleset = new OsuRuleset().RulesetInfo;
|
|
||||||
|
|
||||||
Assert.That(((OsuModDoubleTime)deserialised?.Mods[0])?.SpeedChange.Value, Is.EqualTo(2));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TestRuleset : Ruleset
|
private class TestRuleset : Ruleset
|
||||||
|
|
|
@ -1,17 +1,12 @@
|
||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Converters;
|
|
||||||
using osu.Framework.IO.Network;
|
using osu.Framework.IO.Network;
|
||||||
using osu.Game.Online.API;
|
using osu.Game.Online.API;
|
||||||
using osu.Game.Online.API.Requests.Responses;
|
|
||||||
using osu.Game.Online.Rooms;
|
using osu.Game.Online.Rooms;
|
||||||
using osu.Game.Rulesets.Scoring;
|
|
||||||
using osu.Game.Scoring;
|
using osu.Game.Scoring;
|
||||||
using osu.Game.Users;
|
|
||||||
|
|
||||||
namespace osu.Game.Online.Solo
|
namespace osu.Game.Online.Solo
|
||||||
{
|
{
|
||||||
|
@ -47,57 +42,4 @@ protected override WebRequest CreateWebRequest()
|
||||||
|
|
||||||
protected override string Target => $@"beatmaps/{beatmapId}/solo/scores/{scoreId}";
|
protected override string Target => $@"beatmaps/{beatmapId}/solo/scores/{scoreId}";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A class specifically for sending scores to the API during score submission.
|
|
||||||
/// This is used instead of <see cref="APIScoreInfo"/> due to marginally different serialisation naming requirements.
|
|
||||||
/// </summary>
|
|
||||||
public class SubmittableScore
|
|
||||||
{
|
|
||||||
[JsonProperty("rank")]
|
|
||||||
[JsonConverter(typeof(StringEnumConverter))]
|
|
||||||
public ScoreRank Rank { get; }
|
|
||||||
|
|
||||||
[JsonProperty("total_score")]
|
|
||||||
public long TotalScore { get; }
|
|
||||||
|
|
||||||
[JsonProperty("accuracy")]
|
|
||||||
public double Accuracy { get; }
|
|
||||||
|
|
||||||
[JsonProperty(@"pp")]
|
|
||||||
public double? PP { get; }
|
|
||||||
|
|
||||||
[JsonProperty("max_combo")]
|
|
||||||
public int MaxCombo { get; }
|
|
||||||
|
|
||||||
[JsonProperty("ruleset_id")]
|
|
||||||
public int RulesetID { get; }
|
|
||||||
|
|
||||||
[JsonProperty("passed")]
|
|
||||||
public bool Passed { get; }
|
|
||||||
|
|
||||||
// Used for API serialisation/deserialisation.
|
|
||||||
[JsonProperty("mods")]
|
|
||||||
public APIMod[] Mods { get; }
|
|
||||||
|
|
||||||
[JsonProperty("user")]
|
|
||||||
public User User { get; }
|
|
||||||
|
|
||||||
[JsonProperty("statistics")]
|
|
||||||
public Dictionary<HitResult, int> Statistics { get; }
|
|
||||||
|
|
||||||
public SubmittableScore(ScoreInfo score)
|
|
||||||
{
|
|
||||||
Rank = score.Rank;
|
|
||||||
TotalScore = score.TotalScore;
|
|
||||||
Accuracy = score.Accuracy;
|
|
||||||
PP = score.PP;
|
|
||||||
MaxCombo = score.MaxCombo;
|
|
||||||
RulesetID = score.RulesetID;
|
|
||||||
Passed = score.Passed;
|
|
||||||
Mods = score.APIMods;
|
|
||||||
User = score.User;
|
|
||||||
Statistics = score.Statistics;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Converters;
|
||||||
|
using osu.Game.Online.API;
|
||||||
|
using osu.Game.Online.API.Requests.Responses;
|
||||||
|
using osu.Game.Rulesets.Scoring;
|
||||||
|
using osu.Game.Scoring;
|
||||||
|
using osu.Game.Users;
|
||||||
|
|
||||||
|
namespace osu.Game.Online.Solo
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A class specifically for sending scores to the API during score submission.
|
||||||
|
/// This is used instead of <see cref="APIScoreInfo"/> due to marginally different serialisation naming requirements.
|
||||||
|
/// </summary>
|
||||||
|
[Serializable]
|
||||||
|
public class SubmittableScore
|
||||||
|
{
|
||||||
|
[JsonProperty("rank")]
|
||||||
|
[JsonConverter(typeof(StringEnumConverter))]
|
||||||
|
public ScoreRank Rank { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("total_score")]
|
||||||
|
public long TotalScore { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("accuracy")]
|
||||||
|
public double Accuracy { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty(@"pp")]
|
||||||
|
public double? PP { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("max_combo")]
|
||||||
|
public int MaxCombo { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("ruleset_id")]
|
||||||
|
public int RulesetID { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("passed")]
|
||||||
|
public bool Passed { get; set; }
|
||||||
|
|
||||||
|
// Used for API serialisation/deserialisation.
|
||||||
|
[JsonProperty("mods")]
|
||||||
|
public APIMod[] Mods { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("user")]
|
||||||
|
public User User { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("statistics")]
|
||||||
|
public Dictionary<HitResult, int> Statistics { get; set; }
|
||||||
|
|
||||||
|
[UsedImplicitly]
|
||||||
|
public SubmittableScore()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public SubmittableScore(ScoreInfo score)
|
||||||
|
{
|
||||||
|
Rank = score.Rank;
|
||||||
|
TotalScore = score.TotalScore;
|
||||||
|
Accuracy = score.Accuracy;
|
||||||
|
PP = score.PP;
|
||||||
|
MaxCombo = score.MaxCombo;
|
||||||
|
RulesetID = score.RulesetID;
|
||||||
|
Passed = score.Passed;
|
||||||
|
Mods = score.APIMods;
|
||||||
|
User = score.User;
|
||||||
|
Statistics = score.Statistics;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue