Skip to content

Commit 011d740

Browse files
authored
Create new File, Image, User content types (#123)
1 parent e55d442 commit 011d740

6 files changed

Lines changed: 140 additions & 5 deletions

File tree

src/SenseNet.Client.Tests/UnitTests/RepositoryTests.cs

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -988,6 +988,61 @@ public async Task Repository_T_RegisterGlobalContentType_TypeAndDifferentName()
988988
Assert.AreEqual(typeof(MyContent), contentType);
989989
}
990990

991+
[TestMethod]
992+
public async Task Repository_T_RegisterGlobalContentType_BuiltIn_User()
993+
{
994+
// ALIGN
995+
var restCaller = CreateRestCallerFor(@"
996+
{
997+
""d"": {
998+
""Id"": 1,
999+
""Path"": ""/Root/IMS/BuiltIn/Admin"",
1000+
""Name"": ""Admin"",
1001+
""Type"": ""User"",
1002+
""LoginName"": ""admin"",
1003+
""Email"": ""admin@example.com"",
1004+
""BirthDate"": ""2000-02-03T00:00:00Z"",
1005+
""Avatar"": {
1006+
""Url"": ""/Root/Content/images/avatar.png""
1007+
},
1008+
""ImageRef"": {
1009+
""Id"": 123,
1010+
""Path"": ""/Root/Content/images/avatar.png"",
1011+
""Type"": ""Image"",
1012+
""Name"": ""avatar.png"",
1013+
""DateTaken"": ""2010-10-01T00:00:00Z"",
1014+
""Width"": 456,
1015+
""Height"": 789
1016+
}
1017+
}
1018+
}");
1019+
1020+
var repositories = GetRepositoryCollection(services =>
1021+
{
1022+
services.AddSingleton(restCaller);
1023+
});
1024+
1025+
var repository = await repositories.GetRepositoryAsync(FakeServer, CancellationToken.None)
1026+
.ConfigureAwait(false);
1027+
1028+
// ACT
1029+
var user = await repository.LoadContentAsync<User>("/testcontentpath", CancellationToken.None);
1030+
1031+
// ASSERT
1032+
Assert.IsNotNull(user);
1033+
Assert.AreEqual(typeof(User), user.GetType());
1034+
Assert.AreEqual("Admin", user.Name);
1035+
Assert.AreEqual("admin", user.LoginName);
1036+
Assert.AreEqual("admin@example.com", user.Email);
1037+
Assert.AreEqual(new DateTime(2000, 02, 03, 0, 0, 0, DateTimeKind.Utc), user.BirthDate);
1038+
1039+
Assert.AreEqual(typeof(Image), user.ImageRef.GetType());
1040+
Assert.AreEqual(123, user.ImageRef.Id);
1041+
Assert.AreEqual(456, user.ImageRef.Width);
1042+
Assert.AreEqual(789, user.ImageRef.Height);
1043+
Assert.AreEqual("/Root/Content/images/avatar.png", user.Avatar.Url);
1044+
}
1045+
9911046
[TestMethod]
9921047
public async Task Repository_T_RegisterContentTypes()
9931048
{
@@ -1014,7 +1069,7 @@ public async Task Repository_T_RegisterContentTypes()
10141069
var repositoryAcc = new ObjectAccessor(repository);
10151070
var services = (IServiceProvider)repositoryAcc.GetField("_services");
10161071
Assert.AreEqual(ExampleUrl, repository.Server.Url);
1017-
Assert.AreEqual(0, repository.GlobalContentTypes.ContentTypes.Count);
1072+
Assert.AreEqual(3, repository.GlobalContentTypes.ContentTypes.Count);
10181073
var contentTypeRegistrations = repository.Server.RegisteredContentTypes.ContentTypes
10191074
.OrderBy(x => x.Value.Name)
10201075
.ToArray();
@@ -1067,7 +1122,7 @@ public async Task Repository_T_RegisterContentTypes_DifferentTypeSameName()
10671122
// ASSERT
10681123
// check repo1
10691124
Assert.AreEqual(ExampleUrl, repository1.Server.Url);
1070-
Assert.AreEqual(0, repository1.GlobalContentTypes.ContentTypes.Count);
1125+
Assert.AreEqual(3, repository1.GlobalContentTypes.ContentTypes.Count);
10711126
var contentTypeRegistrations1 = repository1.Server.RegisteredContentTypes.ContentTypes
10721127
.OrderBy(x => x.Value.Name)
10731128
.ToArray();
@@ -1077,7 +1132,7 @@ public async Task Repository_T_RegisterContentTypes_DifferentTypeSameName()
10771132

10781133
// check repo2
10791134
Assert.AreEqual(exampleUrl2, repository2.Server.Url);
1080-
Assert.AreEqual(0, repository2.GlobalContentTypes.ContentTypes.Count);
1135+
Assert.AreEqual(3, repository2.GlobalContentTypes.ContentTypes.Count);
10811136
var contentTypeRegistrations2 = repository2.Server.RegisteredContentTypes.ContentTypes
10821137
.OrderBy(x => x.Value.Name)
10831138
.ToArray();
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using Microsoft.Extensions.Logging;
2+
3+
// ReSharper disable once CheckNamespace
4+
namespace SenseNet.Client
5+
{
6+
/// <summary>
7+
/// Represents a file in the sensenet repository.
8+
/// </summary>
9+
public class File : Content
10+
{
11+
public File(IRestCaller restCaller, ILogger<File> logger) : base(restCaller, logger)
12+
{
13+
}
14+
}
15+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using Microsoft.Extensions.Logging;
2+
using System;
3+
4+
// ReSharper disable once CheckNamespace
5+
namespace SenseNet.Client
6+
{
7+
/// <summary>
8+
/// Represents an image in the sensenet repository.
9+
/// </summary>
10+
public class Image : File
11+
{
12+
public int Width { get; set; }
13+
public int Height { get; set; }
14+
public DateTime DateTaken { get; set; }
15+
16+
public Image(IRestCaller restCaller, ILogger<Image> logger) : base(restCaller, logger)
17+
{
18+
}
19+
}
20+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using Microsoft.Extensions.Logging;
2+
using System;
3+
4+
// ReSharper disable once CheckNamespace
5+
namespace SenseNet.Client
6+
{
7+
/// <summary>
8+
/// Represents a user in the sensenet repository.
9+
/// </summary>
10+
public class User : Content
11+
{
12+
public User(IRestCaller restCaller, ILogger<Content> logger) : base(restCaller, logger)
13+
{
14+
}
15+
16+
public string LoginName { get; set; }
17+
public string DisplayName { get; set; }
18+
public string JobTitle { get; set; }
19+
public bool Enabled { get; set; }
20+
public string Domain { get; set; }
21+
public string Email { get; set; }
22+
public string FullName { get; set; }
23+
public Image ImageRef { get; set; }
24+
public Avatar Avatar { get; set; }
25+
public DateTime LastSync { get; set; }
26+
public User Manager { get; set; }
27+
public string Department { get; set; }
28+
public string Languages { get; set; }
29+
public string Phone { get; set; }
30+
public DateTime BirthDate { get; set; }
31+
public string TwitterAccount { get; set; }
32+
public string FacebookURL { get; set; }
33+
public string LinkedInURL { get; set; }
34+
public string ProfilePath { get; set; }
35+
public bool MultiFactorEnabled { get; set; }
36+
}
37+
38+
public class Avatar
39+
{
40+
public string Url { get; set; }
41+
}
42+
}

src/SenseNet.Client/Importer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ private async Task ImportInternal()
155155
if (string.IsNullOrEmpty(_sourcePath))
156156
throw new InvalidOperationException("Empty source path.");
157157

158-
var isFile = File.Exists(_sourcePath);
158+
var isFile = System.IO.File.Exists(_sourcePath);
159159
var isDirectory = Directory.Exists(_sourcePath);
160160

161161
if (!isFile && !isDirectory)
@@ -232,7 +232,7 @@ private async Task ImportDocumentAsync(string sourcePath, string targetPath)
232232
var parent = await Content.LoadAsync(targetPath).ConfigureAwait(false);
233233
Content file;
234234

235-
using (var fileStream = File.OpenRead(sourcePath))
235+
using (var fileStream = System.IO.File.OpenRead(sourcePath))
236236
{
237237
// TODO: implement multiple target servers
238238
file = await Content.UploadAsync(parent.Id, name, fileStream, _options.FileTypeName).ConfigureAwait(false);

src/SenseNet.Client/RepositoryExtensions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ public static IServiceCollection AddSenseNetClient(this IServiceCollection servi
4545
.AddTransient<IRestCaller, DefaultRestCaller>()
4646
.AddTransient<IRepository, Repository>()
4747
.AddTransient<Content, Content>()
48+
.RegisterGlobalContentType<File>()
49+
.RegisterGlobalContentType<Image>()
50+
.RegisterGlobalContentType<User>()
4851
.AddSenseNetRetrier()
4952
.AddLogging()
5053
.Configure<ServerContextOptions>(_ => { });

0 commit comments

Comments
 (0)