Skip to content

Commit b2c46aa

Browse files
committed
Refactor
1 parent e221314 commit b2c46aa

22 files changed

Lines changed: 301 additions & 231 deletions

TLEGenerator.Tests/CommandLineOptionsTests.cs

Lines changed: 0 additions & 46 deletions
This file was deleted.

TLEGenerator.Tests/GlobalUsings.cs

Lines changed: 0 additions & 2 deletions
This file was deleted.

TLEGenerator.Tests/TLEGenerator.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111

1212
<ItemGroup>
1313
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
14+
<PackageReference Include="moq" Version="4.20.72" />
1415
<PackageReference Include="MSTest.TestAdapter" Version="3.0.4" />
1516
<PackageReference Include="MSTest.TestFramework" Version="3.0.4" />
16-
<PackageReference Include="coverlet.collector" Version="6.0.0" />
1717
</ItemGroup>
1818

1919
<ItemGroup>
Lines changed: 51 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,92 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using Moq;
3+
14
namespace TleGenerator.Tests;
25

36
[TestClass]
47
public class TLEDataManagerTest
58
{
6-
Config config = new()
9+
private Config config;
10+
private Mock<ITleDataDownloader> mockTleDataDownloader;
11+
private Mock<ITleDataCarrier> mockTleDataCarrier;
12+
private Mock<IFileManager> mockFileManager;
13+
private Mock<ITleFileParser> mockTleFileParser;
14+
15+
[TestInitialize]
16+
public void Setup()
717
{
8-
NoradUrl = "fakeUrl",
9-
Groups = ["test"],
10-
TempFolder = "TestData",
11-
TempFilesDays = 65000
12-
};
18+
config = new Config
19+
{
20+
NoradUrl = "fakeUrl",
21+
Groups = [ "test" ],
22+
TempFolder = "TestData",
23+
TempFilesDays = 65000
24+
};
25+
26+
mockTleDataDownloader = new Mock<ITleDataDownloader>();
27+
mockTleDataCarrier = new Mock<ITleDataCarrier>();
28+
mockFileManager = new Mock<IFileManager>();
29+
mockTleFileParser = new Mock<ITleFileParser>();
30+
31+
mockTleDataCarrier.Setup(c => c.Get("33591")).Returns(new Tle { Title = "NOAA 19", Line1 = "", Line2 = "" });
32+
mockTleDataCarrier.Setup(c => c.Get("43013")).Returns(new Tle { Title = "NOAA 20", Line1 = "", Line2 = "" });
33+
mockTleDataCarrier.Setup(c => c.Get("54234")).Returns(new Tle { Title = "NOAA 21", Line1 = "", Line2 = "" });
34+
mockTleDataCarrier.Setup(c => c.Get("0101")).Returns((Tle)null);
35+
}
1336

1437
[TestMethod]
15-
public void ShouldReturnTLEWhenCatalogNumberIsPresentInGroups()
38+
public async Task ShouldReturnTLEWhenCatalogNumberIsPresentInGroups()
1639
{
17-
TLEDataManager sut = new(config);
40+
var sut = CreateTleDataManager();
1841

19-
sut.RetrieveGroupsData();
42+
await sut.RetrieveGroupsDataAsync(config.Groups);
2043

21-
var tle = sut.GetTLE("33591");
44+
var tle = await sut.GetTLEAsync("33591");
2245

2346
Assert.IsNotNull(tle);
2447
Assert.IsTrue(tle.Title.StartsWith("NOAA 19"));
2548
}
2649

2750
[TestMethod]
28-
public void ShouldReturnTLEWhenCatalogNumberIsPresentInTempFolder()
51+
public async Task ShouldReturnTLEWhenCatalogNumberIsPresentInTempFolder()
2952
{
30-
TLEDataManager sut = new(config);
53+
var sut = CreateTleDataManager();
3154

32-
sut.RetrieveGroupsData();
55+
await sut.RetrieveGroupsDataAsync(config.Groups);
3356

34-
var tle = sut.GetTLE("43013");
57+
var tle = await sut.GetTLEAsync("43013");
3558

3659
Assert.IsNotNull(tle);
3760
Assert.IsTrue(tle.Title.StartsWith("NOAA 20"));
3861
}
3962

4063
[TestMethod]
41-
public void ShouldReturnTLEWhenCatalogNumberIsNotPresentInTempFolder()
64+
public async Task ShouldReturnTLEWhenCatalogNumberIsNotPresentInTempFolder()
4265
{
43-
config.NoradUrl = "https://celestrak.com/NORAD/elements/gp.php";
66+
var sut = CreateTleDataManager();
4467

45-
TLEDataManager sut = new(config);
68+
await sut.RetrieveGroupsDataAsync(config.Groups);
4669

47-
sut.RetrieveGroupsData();
48-
49-
var tle = sut.GetTLE("54234");
70+
var tle = await sut.GetTLEAsync("54234");
5071

5172
Assert.IsNotNull(tle);
5273
Assert.IsTrue(tle.Title.StartsWith("NOAA 21"));
5374
}
5475

5576
[TestMethod]
56-
public void ShouldReturnNullWhenCatalogNumberIsNotFound()
77+
public async Task ShouldReturnNullWhenCatalogNumberIsNotFound()
5778
{
58-
config.NoradUrl = "https://celestrak.com/NORAD/elements/gp.php";
59-
60-
TLEDataManager sut = new(config);
79+
var sut = CreateTleDataManager();
6180

62-
sut.RetrieveGroupsData();
81+
await sut.RetrieveGroupsDataAsync(config.Groups);
6382

64-
var tle = sut.GetTLE("0101");
83+
var tle = await sut.GetTLEAsync("0101");
6584

6685
Assert.IsNull(tle);
6786
}
68-
}
87+
88+
private TleDataManager CreateTleDataManager()
89+
{
90+
return new TleDataManager(mockFileManager.Object, mockTleDataCarrier.Object, mockTleDataDownloader.Object, mockTleFileParser.Object);
91+
}
92+
}

TLEGenerator.Tests/TleFileParserTests.cs

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,70 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
13
namespace TleGenerator.Tests;
24

35
[TestClass]
46
public class TLEFileParserTests
57
{
68
const string TestFile = "./TestData/test.txt";
9+
private TleFileParser tleFileParser;
10+
private TleDataCarrier tleDataCarrier;
11+
12+
[TestInitialize]
13+
public void Setup()
14+
{
15+
tleFileParser = new(new FileStorage());
16+
tleDataCarrier = new();
17+
}
718

819
[TestMethod]
920
[DataRow("")]
1021
[DataRow(" ")]
1122
public void ShouldReturnExceptionWhenPathIsInvalid(string testPath)
1223
{
13-
TleDataCarrier tleDataCarrier = new();
14-
15-
Assert.ThrowsException<ArgumentException>(() => TleHandler.ParseFile(testPath, tleDataCarrier));
24+
Assert.ThrowsExceptionAsync<ArgumentException>(async () => await tleFileParser.ParseFileAsync(testPath, tleDataCarrier));
1625
}
1726

1827
[TestMethod]
1928
public void ShouldReturnExceptionWhenFileDoesNotExist()
2029
{
21-
TleDataCarrier tleDataCarrier = new();
22-
23-
Assert.ThrowsException<FileNotFoundException>(() => TleHandler.ParseFile("./fake.txt", tleDataCarrier));
30+
Assert.ThrowsExceptionAsync<FileNotFoundException>(async () => await tleFileParser.ParseFileAsync("./fake.txt", tleDataCarrier));
2431
}
2532

2633
[TestMethod]
27-
public void ShouldParseTheSpecifiedFile()
34+
public async Task ShouldParseTheSpecifiedFile()
2835
{
29-
TleDataCarrier tleDataCarrier = new();
30-
31-
TleHandler.ParseFile(TestFile, tleDataCarrier);
36+
await tleFileParser.ParseFileAsync(TestFile, tleDataCarrier);
3237

33-
Assert.AreEqual(10, tleDataCarrier.Size());
38+
Assert.AreEqual(10, tleDataCarrier.Count);
3439
}
3540

3641
[TestMethod]
37-
public void ShouldAvoidDuplicates()
42+
public async Task ShouldAvoidDuplicates()
3843
{
39-
TleDataCarrier tleDataCarrier = new();
40-
41-
TleHandler.ParseFile(TestFile, tleDataCarrier);
42-
TleHandler.ParseFile(TestFile, tleDataCarrier);
44+
await tleFileParser.ParseFileAsync(TestFile, tleDataCarrier);
45+
await tleFileParser.ParseFileAsync(TestFile, tleDataCarrier);
4346

44-
Assert.AreEqual(10, tleDataCarrier.Size());
47+
Assert.AreEqual(10, tleDataCarrier.Count);
4548
}
4649

4750
[TestMethod]
48-
public void ShouldReturnNullWhenTheRequestedDataDoesNotExist()
51+
public async Task ShouldReturnNullWhenTheRequestedDataDoesNotExist()
4952
{
50-
TleDataCarrier tleDataCarrier = new();
53+
await tleFileParser.ParseFileAsync(TestFile, tleDataCarrier);
5154

52-
TleHandler.ParseFile(TestFile, tleDataCarrier);
53-
54-
Assert.AreEqual(10, tleDataCarrier.Size());
55+
Assert.AreEqual(10, tleDataCarrier.Count);
5556

5657
var tle = tleDataCarrier.Get("0");
5758

5859
Assert.IsNull(tle);
5960
}
6061

6162
[TestMethod]
62-
public void ShouldRetrieveTheRequestedDataIfExists()
63+
public async Task ShouldRetrieveTheRequestedDataIfExists()
6364
{
64-
TleDataCarrier tleDataCarrier = new();
65-
66-
TleHandler.ParseFile(TestFile, tleDataCarrier);
65+
await tleFileParser.ParseFileAsync(TestFile, tleDataCarrier);
6766

68-
Assert.AreEqual(10, tleDataCarrier.Size());
67+
Assert.AreEqual(10, tleDataCarrier.Count);
6968

7069
var tle = tleDataCarrier.Get("33591");
7170

TLEGenerator/CommandLineOptions.cs

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,35 @@
1+
using System.CommandLine;
2+
13
namespace TleGenerator;
24

3-
public class CommandLineOptions
5+
public class CommandLineOptions : ICommandLineOptions
46
{
5-
public string? Input { get; set; }
6-
7-
public string? OutputFilePath { get; set; }
7+
public string? Input { get; private set; }
8+
public string? OutputFilePath { get; private set; }
89

9-
public void ParseArgs(string[] args)
10+
public async Task ParseArgsAsync(string[] args)
1011
{
11-
if (args.Length < 2) return;
12+
var inputOption = new Option<string?>(
13+
aliases: ["--input", "-i"],
14+
description: "List of catalog numbers of satellites separated by commas.");
15+
16+
var outputOption = new Option<string?>(
17+
aliases: ["--output", "-o"],
18+
description: "Output file path.",
19+
getDefaultValue: () => "custom_TLE.txt");
1220

13-
for (int i = 0; i < args.Length - 1; i++)
21+
var rootCommand = new RootCommand
1422
{
15-
if (args[i] == "-i")
16-
{
17-
Input = args[i + 1];
18-
}
19-
else if (args[i] == "-o")
20-
{
21-
OutputFilePath = args[i + 1];
22-
}
23-
}
23+
inputOption,
24+
outputOption
25+
};
26+
27+
rootCommand.SetHandler((input, output) =>
28+
{
29+
Input = input;
30+
OutputFilePath = output;
31+
}, inputOption, outputOption);
32+
33+
await rootCommand.InvokeAsync(args);
2434
}
2535
}

TLEGenerator/FileStorage.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace TleGenerator;
2+
3+
public class FileStorage : IFileStorage
4+
{
5+
public async Task SaveStreamAsync(Stream stream, string destinationPath)
6+
{
7+
using FileStream outputFileStream = new(destinationPath, FileMode.Create);
8+
await stream.CopyToAsync(outputFileStream);
9+
}
10+
11+
public Stream GetFileStream(string filePath)
12+
{
13+
return File.Exists(filePath)
14+
? new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)
15+
: Stream.Null;
16+
}
17+
}

TLEGenerator/HttpClientWrapper.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace TleGenerator;
2+
3+
public class HttpClientWrapper : IHttpClientWrapper
4+
{
5+
private readonly HttpClient _httpClient = new();
6+
7+
public async Task<Stream> GetStreamAsync(string url)
8+
{
9+
return await _httpClient.GetStreamAsync(url);
10+
}
11+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace TleGenerator;
2+
3+
public interface ICommandLineOptions
4+
{
5+
string? Input { get; }
6+
string? OutputFilePath { get; }
7+
Task ParseArgsAsync(string[] args);
8+
}

TLEGenerator/IFileManager.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace TleGenerator;
2+
3+
public interface IFileManager
4+
{
5+
bool IsOldFile(string path);
6+
string GetFilePath(string identifier);
7+
}

0 commit comments

Comments
 (0)