config can be made and articles can be listed in a basic way
This commit is contained in:
parent
2e17af3b97
commit
fe3f4cfae1
35
Newsbot.Cli.sln
Normal file
35
Newsbot.Cli.sln
Normal file
@ -0,0 +1,35 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
#
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Newsbot.Cli", "Newsbot.Cli\Newsbot.Cli.csproj", "{1566F59D-6BFA-4F98-B4B0-F2A5D92B182B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Newsbot.Domain", "Newsbot.Domain\Newsbot.Domain.csproj", "{71C391A5-9A94-449C-896E-8D6AB79CE44B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Newsbot.Services", "Newsbot.Services\Newsbot.Services.csproj", "{B82F77EA-64FF-40AD-BD8B-6EAFAB2062BA}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Newsbot.Tests", "Newsbot.Tests\Newsbot.Tests.csproj", "{04B65EE4-E65C-4AA6-A27C-9400BE74FC31}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{1566F59D-6BFA-4F98-B4B0-F2A5D92B182B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1566F59D-6BFA-4F98-B4B0-F2A5D92B182B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1566F59D-6BFA-4F98-B4B0-F2A5D92B182B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1566F59D-6BFA-4F98-B4B0-F2A5D92B182B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{71C391A5-9A94-449C-896E-8D6AB79CE44B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{71C391A5-9A94-449C-896E-8D6AB79CE44B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{71C391A5-9A94-449C-896E-8D6AB79CE44B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{71C391A5-9A94-449C-896E-8D6AB79CE44B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B82F77EA-64FF-40AD-BD8B-6EAFAB2062BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B82F77EA-64FF-40AD-BD8B-6EAFAB2062BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B82F77EA-64FF-40AD-BD8B-6EAFAB2062BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B82F77EA-64FF-40AD-BD8B-6EAFAB2062BA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{04B65EE4-E65C-4AA6-A27C-9400BE74FC31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{04B65EE4-E65C-4AA6-A27C-9400BE74FC31}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{04B65EE4-E65C-4AA6-A27C-9400BE74FC31}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{04B65EE4-E65C-4AA6-A27C-9400BE74FC31}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
35
Newsbot.Cli/Commands/ArticlesListCommand.cs
Normal file
35
Newsbot.Cli/Commands/ArticlesListCommand.cs
Normal file
@ -0,0 +1,35 @@
|
||||
using System.Runtime.CompilerServices;
|
||||
using CliFx;
|
||||
using CliFx.Attributes;
|
||||
using CliFx.Infrastructure;
|
||||
using jtom38.Newsbot.Services;
|
||||
using jtom38.Newsbot.Services.Terminal;
|
||||
using Newsbot.Services.Collector;
|
||||
|
||||
namespace jtom38.Newsbot.Cli.Commands;
|
||||
|
||||
[Command("articles list", Description = "List the newest articles")]
|
||||
public class ArticlesListCommand : ICommand
|
||||
{
|
||||
public async ValueTask ExecuteAsync(IConsole console)
|
||||
{
|
||||
var cfg = ConfigClient.LoadAsync();
|
||||
var client = new ArticlesClient(cfg.Result.Uri);
|
||||
var r = await client.ListArticles();
|
||||
|
||||
var count = 0;
|
||||
foreach (var item in r)
|
||||
{
|
||||
var title = item.Title ?? "";
|
||||
title = title.ReplaceLineEndings("");
|
||||
|
||||
var msg = $"[{count}] = {title}";
|
||||
await console.Output.WriteLineAsync(msg);
|
||||
count++;
|
||||
}
|
||||
|
||||
|
||||
//var resp = UserInputService.WaitForInput("Enter the number to read the article");
|
||||
|
||||
}
|
||||
}
|
15
Newsbot.Cli/Commands/Config/SetAuthKey.cs
Normal file
15
Newsbot.Cli/Commands/Config/SetAuthKey.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using CliFx;
|
||||
using CliFx.Attributes;
|
||||
using CliFx.Infrastructure;
|
||||
|
||||
namespace jtom38.Newsbot.Cli.Commands.Config;
|
||||
|
||||
[Command("config set token")]
|
||||
public class SetAuthKey : ICommand
|
||||
{
|
||||
public ValueTask ExecuteAsync(IConsole console)
|
||||
{
|
||||
//await SetInstanceService.Save(Uri);
|
||||
return default;
|
||||
}
|
||||
}
|
18
Newsbot.Cli/Commands/Config/SetInstance.cs
Normal file
18
Newsbot.Cli/Commands/Config/SetInstance.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using CliFx;
|
||||
using CliFx.Attributes;
|
||||
using CliFx.Infrastructure;
|
||||
using jtom38.Newsbot.Services.Config;
|
||||
|
||||
namespace jtom38.Newsbot.Cli.Commands.Config;
|
||||
|
||||
[Command("config set instance")]
|
||||
public class SetInstance: ICommand
|
||||
{
|
||||
[CommandParameter(0, Description = "URI of the instance", Name = "uri")]
|
||||
public required string Uri { get; set; }
|
||||
|
||||
public async ValueTask ExecuteAsync(IConsole console)
|
||||
{
|
||||
await SetInstanceService.Save(Uri);
|
||||
}
|
||||
}
|
16
Newsbot.Cli/Commands/Config/ShowInstance.cs
Normal file
16
Newsbot.Cli/Commands/Config/ShowInstance.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using CliFx;
|
||||
using CliFx.Attributes;
|
||||
using CliFx.Infrastructure;
|
||||
using jtom38.Newsbot.Services;
|
||||
|
||||
namespace jtom38.Newsbot.Cli.Commands.Config;
|
||||
|
||||
[Command("config show instance")]
|
||||
public class ShowInstance : ICommand
|
||||
{
|
||||
public async ValueTask ExecuteAsync(IConsole console)
|
||||
{
|
||||
var res = await ConfigClient.LoadAsync();
|
||||
await console.Output.WriteLineAsync(res.Uri);
|
||||
}
|
||||
}
|
14
Newsbot.Cli/Commands/SourcesList.cs
Normal file
14
Newsbot.Cli/Commands/SourcesList.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using CliFx;
|
||||
using CliFx.Attributes;
|
||||
using CliFx.Infrastructure;
|
||||
|
||||
namespace jtom38.Newsbot.Cli.Commands;
|
||||
|
||||
[Command("sources list", Description = "Lists the known sources")]
|
||||
public class SourcesList : ICommand
|
||||
{
|
||||
public async ValueTask ExecuteAsync(IConsole console)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
BIN
Newsbot.Cli/Newsbot.Cli
Executable file
BIN
Newsbot.Cli/Newsbot.Cli
Executable file
Binary file not shown.
22
Newsbot.Cli/Newsbot.Cli.csproj
Normal file
22
Newsbot.Cli/Newsbot.Cli.csproj
Normal file
@ -0,0 +1,22 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
|
||||
<PublishSingleFile>true</PublishSingleFile>
|
||||
<SelfContained>true</SelfContained>
|
||||
<RootNamespace>jtom38.Newsbot.Cli</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="clifx" Version="2.3.4" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Newsbot.Services\Newsbot.Services.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
7
Newsbot.Cli/Program.cs
Normal file
7
Newsbot.Cli/Program.cs
Normal file
@ -0,0 +1,7 @@
|
||||
using CliFx;
|
||||
|
||||
await new CliApplicationBuilder()
|
||||
.AddCommandsFromThisAssembly()
|
||||
.SetExecutableName("Newsbot.Cli")
|
||||
.Build()
|
||||
.RunAsync();
|
20
Newsbot.Domain/Models/Collector/ArticleDetailsDto.cs
Normal file
20
Newsbot.Domain/Models/Collector/ArticleDetailsDto.cs
Normal file
@ -0,0 +1,20 @@
|
||||
namespace jtom38.Newsbot.Domain.Models.Collector;
|
||||
|
||||
public class ArticleDetailsDto
|
||||
{
|
||||
public Guid ID { get; set; }
|
||||
public string[]? Tags { get; set; }
|
||||
public string? Title { get; set; }
|
||||
public string? Url { get; set; }
|
||||
public DateTime PubDate { get; set; }
|
||||
public string? Video { get; set; }
|
||||
public int VideoHeight { get; set; }
|
||||
public int VideoWidth { get; set; }
|
||||
public string? Thumbnail { get; set; }
|
||||
public string? Description { get; set; }
|
||||
public string? AuthorName { get; set; }
|
||||
public string? AuthorImage { get; set; }
|
||||
|
||||
public SourceDto? Source { get; set; }
|
||||
|
||||
}
|
45
Newsbot.Domain/Models/Collector/ArticlesDto.cs
Normal file
45
Newsbot.Domain/Models/Collector/ArticlesDto.cs
Normal file
@ -0,0 +1,45 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace jtom38.Newsbot.Domain.Models.Collector;
|
||||
|
||||
public class ArticlesDto
|
||||
{
|
||||
[JsonProperty("id")]
|
||||
public Guid Id { get; set; }
|
||||
|
||||
[JsonProperty("sourceId")]
|
||||
public Guid SourceId { get; set; }
|
||||
|
||||
[JsonProperty("tags")]
|
||||
public List<string>? Tags { get; set; }
|
||||
|
||||
[JsonProperty("title")]
|
||||
public string? Title { get; set; }
|
||||
|
||||
[JsonProperty("url")]
|
||||
public string? Url { get; set; }
|
||||
|
||||
[JsonProperty("pubDate")]
|
||||
public DateTime PubDate { get; set; }
|
||||
|
||||
[JsonProperty("video")]
|
||||
public string? Video { get; set; }
|
||||
|
||||
[JsonProperty("videoHeight")]
|
||||
public int VideoHeight { get; set; }
|
||||
|
||||
[JsonProperty("videoWidth")]
|
||||
public int VideoWidth { get; set; }
|
||||
|
||||
[JsonProperty("thumbnail")]
|
||||
public string? Thumbnail { get; set; }
|
||||
|
||||
[JsonProperty("description")]
|
||||
public string? Description { get; set; }
|
||||
|
||||
[JsonProperty("authorName")]
|
||||
public string? AuthorName { get; set; }
|
||||
|
||||
[JsonProperty("authorImage")]
|
||||
public string? AuthorImage { get; set; }
|
||||
}
|
10
Newsbot.Domain/Models/Collector/DiscordWebHookDto.cs
Normal file
10
Newsbot.Domain/Models/Collector/DiscordWebHookDto.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace jtom38.Newsbot.Domain.Models.Collector;
|
||||
|
||||
public class DiscordWebHookDto
|
||||
{
|
||||
public Guid ID { get; set; }
|
||||
public string? Url { get; set; }
|
||||
public string? Server { get; set; }
|
||||
public string? Channel { get; set; }
|
||||
public bool Enabled { get; set; }
|
||||
}
|
15
Newsbot.Domain/Models/Collector/SourceDto.cs
Normal file
15
Newsbot.Domain/Models/Collector/SourceDto.cs
Normal file
@ -0,0 +1,15 @@
|
||||
namespace jtom38.Newsbot.Domain.Models.Collector;
|
||||
|
||||
public class SourceDto
|
||||
{
|
||||
public Guid ID { get; set; }
|
||||
public string? Site { get; set; }
|
||||
public string? Name { get; set; }
|
||||
public string? Source { get; set; }
|
||||
public string? Type { get; set; }
|
||||
public string? Value { get; set; }
|
||||
public bool Enabled { get; set; }
|
||||
public string? Url { get; set; }
|
||||
public string[]? Tags { get; set; }
|
||||
public bool Deleted { get; set; }
|
||||
}
|
11
Newsbot.Domain/Models/Collector/SubscriptionDetailsDto.cs
Normal file
11
Newsbot.Domain/Models/Collector/SubscriptionDetailsDto.cs
Normal file
@ -0,0 +1,11 @@
|
||||
namespace jtom38.Newsbot.Domain.Models.Collector;
|
||||
|
||||
public class SubscriptionDetailsDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public bool CodeAllowReleases { get; set; }
|
||||
public bool CodeAllowCommits { get; set; }
|
||||
public SourceDto? Source { get; set; }
|
||||
public DiscordWebHookDto? DiscordWebHook { get; set; }
|
||||
|
||||
}
|
10
Newsbot.Domain/Models/Collector/SubscriptionDto.cs
Normal file
10
Newsbot.Domain/Models/Collector/SubscriptionDto.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace jtom38.Newsbot.Domain.Models.Collector;
|
||||
|
||||
public class SubscriptionDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public Guid SourceId { get; set; }
|
||||
public Guid DiscordWebHookId { get; set; }
|
||||
public bool CodeAllowReleases { get; set; }
|
||||
public bool CodeAllowCommits { get; set; }
|
||||
}
|
7
Newsbot.Domain/Models/Config.cs
Normal file
7
Newsbot.Domain/Models/Config.cs
Normal file
@ -0,0 +1,7 @@
|
||||
namespace jtom38.Newsbot.Domain.Models;
|
||||
|
||||
public class ConfigModel
|
||||
{
|
||||
public string? Uri { get; set; }
|
||||
public string? ApiToken { get; set; }
|
||||
}
|
14
Newsbot.Domain/Newsbot.Domain.csproj
Normal file
14
Newsbot.Domain/Newsbot.Domain.csproj
Normal file
@ -0,0 +1,14 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>jtom38.Newsbot.Domain</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
27
Newsbot.Services/Collector/ArticlesClient.cs
Normal file
27
Newsbot.Services/Collector/ArticlesClient.cs
Normal file
@ -0,0 +1,27 @@
|
||||
using Newtonsoft.Json;
|
||||
using jtom38.Newsbot.Domain.Models.Collector;
|
||||
|
||||
namespace Newsbot.Services.Collector;
|
||||
|
||||
public class ArticlesClient
|
||||
{
|
||||
private readonly HttpClient _client;
|
||||
private string? InstanceUri { get; set; }
|
||||
|
||||
public ArticlesClient(string? instanceUri)
|
||||
{
|
||||
_client = new HttpClient();
|
||||
InstanceUri = instanceUri;
|
||||
}
|
||||
|
||||
public async Task<List<ArticlesDto>> ListArticles()
|
||||
{
|
||||
var resp = await _client.GetAsync($"{InstanceUri}/api/articles");
|
||||
var content = await resp.Content.ReadAsStringAsync();
|
||||
var res = JsonConvert.DeserializeObject<List<ArticlesDto>>(content);
|
||||
|
||||
res ??= new List<ArticlesDto>();
|
||||
|
||||
return res;
|
||||
}
|
||||
}
|
25
Newsbot.Services/Config/SetInstanceService.cs
Normal file
25
Newsbot.Services/Config/SetInstanceService.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using jtom38.Newsbot.Domain.Models;
|
||||
|
||||
namespace jtom38.Newsbot.Services.Config;
|
||||
|
||||
public class SetInstanceService
|
||||
{
|
||||
public static async Task Save(string uri)
|
||||
{
|
||||
var containsHttp = uri.Contains("http://");
|
||||
var containsHttps = uri.Contains("https://");
|
||||
if (!containsHttp && !containsHttps)
|
||||
{
|
||||
throw new Exception("Uri does not define http or https.");
|
||||
}
|
||||
|
||||
Console.WriteLine($"Instance Set to '{uri}'");
|
||||
|
||||
var cfg = await ConfigClient.LoadAsync();
|
||||
|
||||
cfg ??= new ConfigModel();
|
||||
cfg.Uri = uri ?? "";
|
||||
|
||||
await ConfigClient.SaveAsync(cfg);
|
||||
}
|
||||
}
|
55
Newsbot.Services/ConfigClient.cs
Normal file
55
Newsbot.Services/ConfigClient.cs
Normal file
@ -0,0 +1,55 @@
|
||||
using System.Text.Json;
|
||||
using jtom38.Newsbot.Domain.Models;
|
||||
|
||||
namespace jtom38.Newsbot.Services;
|
||||
|
||||
public static class ConfigClient
|
||||
{
|
||||
public static async Task<ConfigModel> LoadAsync()
|
||||
{
|
||||
var blank = new ConfigModel();
|
||||
try
|
||||
{
|
||||
var cfg = await LoadFileAsync();
|
||||
return cfg;
|
||||
}
|
||||
catch (DirectoryNotFoundException)
|
||||
{
|
||||
Directory.CreateDirectory(GetConfigPath());
|
||||
await SaveAsync(blank);
|
||||
return blank;
|
||||
}
|
||||
catch (FileNotFoundException)
|
||||
{
|
||||
await SaveAsync(blank);
|
||||
return blank;
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task SaveAsync(ConfigModel config)
|
||||
{
|
||||
var jsonString = JsonSerializer.Serialize(config, new JsonSerializerOptions { WriteIndented = true});
|
||||
await File.WriteAllTextAsync(GetConfigPath(), jsonString);
|
||||
}
|
||||
|
||||
private static string GetConfigDirectory()
|
||||
{
|
||||
var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
|
||||
var path = Path.Join(appDataPath, "newsbot-cli");
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
private static string GetConfigPath()
|
||||
{
|
||||
var path = Path.Join(GetConfigDirectory(), "config.json");
|
||||
return path;
|
||||
}
|
||||
|
||||
private static async Task<ConfigModel> LoadFileAsync()
|
||||
{
|
||||
var content = await File.ReadAllTextAsync(GetConfigPath());
|
||||
var res = JsonSerializer.Deserialize<ConfigModel>(content);
|
||||
return res ?? new ConfigModel();
|
||||
}
|
||||
}
|
18
Newsbot.Services/Newsbot.Services.csproj
Normal file
18
Newsbot.Services/Newsbot.Services.csproj
Normal file
@ -0,0 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>jtom38.Newsbot.Services</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Newsbot.Domain\Newsbot.Domain.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
18
Newsbot.Services/Terminal/UserInputService.cs
Normal file
18
Newsbot.Services/Terminal/UserInputService.cs
Normal file
@ -0,0 +1,18 @@
|
||||
namespace jtom38.Newsbot.Services.Terminal;
|
||||
|
||||
public class UserInputService
|
||||
{
|
||||
public UserInputService()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public static async Task<string> WaitForInput(string message)
|
||||
{
|
||||
await Task.Delay(1);
|
||||
Console.WriteLine(message);
|
||||
Console.WriteLine("Enter your selection or press 'q' to exit");
|
||||
var input = Console.ReadLine();
|
||||
return input ?? "";
|
||||
}
|
||||
}
|
20
Newsbot.Tests/Clients/ArticlesClientTests.cs
Normal file
20
Newsbot.Tests/Clients/ArticlesClientTests.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using jtom38.Newsbot.Domain.Models.Collector;
|
||||
using Newsbot.Services.Collector;
|
||||
|
||||
namespace Newsbot.Tests.Clients;
|
||||
|
||||
public class ArticlesClientTests
|
||||
{
|
||||
[Fact]
|
||||
public async Task ArticlesAreReturned()
|
||||
{
|
||||
var c = new ArticlesClient("http://192.168.1.225:5001");
|
||||
var res = await c.ListArticles();
|
||||
res ??= new List<ArticlesDto>();
|
||||
|
||||
if (res.Count == 0)
|
||||
{
|
||||
Assert.Fail("No results came back");
|
||||
}
|
||||
}
|
||||
}
|
6
Newsbot.Tests/Commands/SetAuthKeyTest.cs
Normal file
6
Newsbot.Tests/Commands/SetAuthKeyTest.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace Newsbot.Services.Config;
|
||||
|
||||
public class SetAuthKeyTest
|
||||
{
|
||||
|
||||
}
|
30
Newsbot.Tests/Commands/SetInstanceTest.cs
Normal file
30
Newsbot.Tests/Commands/SetInstanceTest.cs
Normal file
@ -0,0 +1,30 @@
|
||||
using jtom38.Newsbot.Domain.Models;
|
||||
using jtom38.Newsbot.Services;
|
||||
using jtom38.Newsbot.Services.Config;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Newsbot.Tests.Commands;
|
||||
|
||||
public class SetInstanceTest
|
||||
{
|
||||
private readonly ITestOutputHelper _testOutputHelper;
|
||||
|
||||
public SetInstanceTest(ITestOutputHelper testOutputHelper)
|
||||
{
|
||||
_testOutputHelper = testOutputHelper;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SetInstanceSavesTheUri()
|
||||
{
|
||||
var uri = "http://localhost:5001";
|
||||
try
|
||||
{
|
||||
await SetInstanceService.Save(uri);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
Assert.Fail(ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
22
Newsbot.Tests/Newsbot.Tests.csproj
Normal file
22
Newsbot.Tests/Newsbot.Tests.csproj
Normal file
@ -0,0 +1,22 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
|
||||
|
||||
<PackageReference Include="coverlet.collector" Version="3.1.2" />
|
||||
<PackageReference Include="xunit" Version="2.4.2" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Newsbot.Services\Newsbot.Services.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
18
Newsbot.Tests/Services/ConfigClientTests.cs
Normal file
18
Newsbot.Tests/Services/ConfigClientTests.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using jtom38.Newsbot.Domain.Models;
|
||||
using jtom38.Newsbot.Services;
|
||||
|
||||
namespace Newsbot.Tests.Services;
|
||||
|
||||
public class ConfigClientTests
|
||||
{
|
||||
[Fact]
|
||||
public async Task CanLoadConfig()
|
||||
{
|
||||
var cfg = await ConfigClient.LoadAsync();
|
||||
cfg = cfg ??= new ConfigModel();
|
||||
if (cfg.Uri == "")
|
||||
{
|
||||
Assert.Fail("Uri was missing");
|
||||
}
|
||||
}
|
||||
}
|
1
Newsbot.Tests/Usings.cs
Normal file
1
Newsbot.Tests/Usings.cs
Normal file
@ -0,0 +1 @@
|
||||
global using Xunit;
|
12
makefile
Normal file
12
makefile
Normal file
@ -0,0 +1,12 @@
|
||||
.PHONY: help
|
||||
help: ## Shows this help command
|
||||
@egrep -h '\s##\s' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
|
||||
|
||||
build: ## builds the application with the current go runtime
|
||||
dotnet restore
|
||||
dotnet build
|
||||
|
||||
pub: ## Generate artifacts
|
||||
dotnet restore
|
||||
dotnet publish
|
||||
cp ./Newsbot.Cli/bin/Debug/net7.0/osx-arm64/publish/Newsbot.Cli ./newsbot
|
Loading…
Reference in New Issue
Block a user