Skip to content
Snippets Groups Projects
Commit 0136e4dc authored by Marcel Nellesen's avatar Marcel Nellesen
Browse files

Merge branch 'Sprint/2020-06' into 'master'

Sprint/2020-06

See merge request coscine/cs/database!60
parents 9b547cc1 2f5da886
No related branches found
No related tags found
1 merge request!60Sprint/2020-06
Showing with 297 additions and 27 deletions
......@@ -41,12 +41,6 @@
<Reference Include="Coscine.Configuration, Version=1.4.0.0, Culture=neutral, PublicKeyToken=ce3d7a32d7dc1e5a, processorArchitecture=MSIL">
<HintPath>..\packages\Coscine.Configuration.1.4.0\lib\net461\Coscine.Configuration.dll</HintPath>
</Reference>
<Reference Include="FluentMigrator, Version=3.1.3.0, Culture=neutral, PublicKeyToken=aacfc7de5acabf05, processorArchitecture=MSIL">
<HintPath>..\packages\FluentMigrator.3.1.3\lib\net461\FluentMigrator.dll</HintPath>
</Reference>
<Reference Include="FluentMigrator.Abstractions, Version=3.1.3.0, Culture=neutral, PublicKeyToken=aacfc7de5acabf05, processorArchitecture=MSIL">
<HintPath>..\packages\FluentMigrator.Abstractions.3.1.3\lib\net461\FluentMigrator.Abstractions.dll</HintPath>
</Reference>
<Reference Include="linq2db, Version=2.6.4.0, Culture=neutral, PublicKeyToken=e41013125f9e410a, processorArchitecture=MSIL">
<HintPath>..\packages\linq2db.2.6.4\lib\net46\linq2db.dll</HintPath>
</Reference>
......
using FluentMigrator;
/*using FluentMigrator;
namespace Coscine.Database.Tests.Migrations
{
......@@ -42,3 +42,4 @@ namespace Coscine.Database.Tests.Migrations
}
}
}
*/
\ No newline at end of file
using Coscine.Configuration;
using Coscine.Database.Models;
using Coscine.Database.Settings;
using LinqToDB;
using LinqToDB.Data;
......@@ -7,26 +8,76 @@ using System.Linq;
namespace Coscine.Database.Tests
{
[TestFixture]
//[TestFixture]
public class ModelTests
{
//[OneTimeSetUp]
[OneTimeSetUp]
public void Init()
{
var targetAssembly = typeof(ModelTests).Assembly;
DataConnection.DefaultSettings = new CoscineSettings(new ConsulConfiguration());
}
//[SetUpAttribute]
[SetUpAttribute]
public void SetUp()
{
}
//[TearDown]
[TearDown]
public void TearDown()
{
}
[Test]
public void TestEmpty()
{
}
//[Test]
public void Test()
{
var model = new ActivatedFeaturesModel();
var projectId = new System.Guid("0DAB5CFD-8ADB-4CEC-ADF2-394F4E746E43");
var featureId1 = new System.Guid("1F682AA3-CA47-434C-BF90-1A6B891F406B");
var featureId2 = new System.Guid("2033E4F9-2812-4DA8-B72C-251E7ECE4539");
var featureId3 = new System.Guid("970B98A5-1769-438D-97FC-3EF8B2CFBDCC");
var sharePointId = "MSOZoneCell_WebPartWPQ2";
model.ActivateFeature(projectId, featureId1);
Assert.True(model.IsFeatureActive(projectId, sharePointId));
Assert.True(model.IsFeatureActive(projectId, featureId1));
model.DeactivateFeature(projectId, featureId1);
Assert.False(model.IsFeatureActive(projectId, sharePointId));
Assert.False(model.IsFeatureActive(projectId, featureId1));
Assert.True(model.GetActiveFeatures(projectId).Count() == 0);
Assert.True(model.GetInactiveFeatures(projectId).Count() == 3);
model.ActivateFeature(projectId, featureId1);
Assert.True(model.GetActiveFeatures(projectId).Count() == 1);
Assert.True(model.GetInactiveFeatures(projectId).Count() == 2);
model.ActivateFeature(projectId, featureId2);
Assert.True(model.GetActiveFeatures(projectId).Count() == 2);
Assert.True(model.GetInactiveFeatures(projectId).Count() == 1);
model.ActivateFeature(projectId, featureId3);
Assert.True(model.GetActiveFeatures(projectId).Count() == 3);
Assert.True(model.GetInactiveFeatures(projectId).Count() == 0);
model.DeactivateFeature(projectId, featureId1);
Assert.True(model.GetActiveFeatures(projectId).Count() == 2);
Assert.True(model.GetInactiveFeatures(projectId).Count() == 1);
model.DeactivateFeature(projectId, featureId2);
Assert.True(model.GetActiveFeatures(projectId).Count() == 1);
Assert.True(model.GetInactiveFeatures(projectId).Count() == 2);
model.DeactivateFeature(projectId, featureId3);
Assert.True(model.GetActiveFeatures(projectId).Count() == 0);
Assert.True(model.GetInactiveFeatures(projectId).Count() == 3);
}
//[Test]
public void TestRead()
{
......
......@@ -9,8 +9,8 @@ using System.Reflection;
[assembly: AssemblyDescription("Database.Tests is a part of the CoScInE group.")]
[assembly: AssemblyCompany("IT Center, RWTH Aachen University")]
[assembly: AssemblyProduct("Database.Tests")]
[assembly: AssemblyVersion("1.17.0")]
[assembly: AssemblyFileVersion("1.17.0")]
[assembly: AssemblyInformationalVersion("1.17.0-topic-671-readab0003")]
[assembly: AssemblyVersion("1.17.1")]
[assembly: AssemblyFileVersion("1.17.1")]
[assembly: AssemblyInformationalVersion("1.17.1-topic-672-toggle0015")]
[assembly: AssemblyCopyright("2020 IT Center, RWTH Aachen University")]
......@@ -2,8 +2,6 @@
<packages>
<package id="Consul" version="0.7.2.6" targetFramework="net461" />
<package id="Coscine.Configuration" version="1.4.0" targetFramework="net461" />
<package id="FluentMigrator" version="3.1.3" targetFramework="net461" />
<package id="FluentMigrator.Abstractions" version="3.1.3" targetFramework="net461" />
<package id="linq2db" version="2.6.4" targetFramework="net461" />
<package id="linq2db.SqlServer" version="2.6.4" targetFramework="net461" />
<package id="Microsoft.Extensions.DependencyInjection" version="2.0.0" targetFramework="net461" />
......
......@@ -75,10 +75,14 @@
</ItemGroup>
<Import Project="CustomT4.targets" />
<ItemGroup>
<Compile Include="Models\ActivatedFeaturesModel.cs" />
<Compile Include="Models\ExternalAuthenticatorModel.cs" />
<Compile Include="Models\ExternalIdModel.cs" />
<Compile Include="Models\FeaturesModel.cs" />
<Compile Include="ReturnObjects\ActivatedFeatureObject.cs" />
<Compile Include="Models\LogModel.cs" />
<Compile Include="ReturnObjects\DisciplineObject.cs" />
<Compile Include="ReturnObjects\FeatureObject.cs" />
<Compile Include="ReturnObjects\GitlabResourceTypeObject.cs" />
<Compile Include="ReturnObjects\InstituteObject.cs" />
<Compile Include="ReturnObjects\IReturnObject.cs" />
......
using System;
using System.Linq;
using System.Linq.Expressions;
using Coscine.Database.DataModel;
using LinqToDB;
using Coscine.Database.Util;
using LinqKit;
using System.Collections.Generic;
namespace Coscine.Database.Models
{
public class ActivatedFeaturesModel : DatabaseModel<ActivatedFeature>
{
public override Expression<Func<ActivatedFeature, Guid>> GetIdFromObject()
{
return databaseObject => databaseObject.Id;
}
public override ITable<ActivatedFeature> GetITableFromDatabase(CoscineDB db)
{
return db.ActivatedFeatures;
}
public override void SetObjectId(ActivatedFeature databaseObject, Guid id)
{
databaseObject.Id = id;
}
public bool IsFeatureActive(Guid projectId, string sharepointId)
{
return GetAllWhere((activatedFeatures) => activatedFeatures.ProjectId == projectId
&& activatedFeatures.Feature.SharepointId == sharepointId).Count() >= 1;
}
public bool IsFeatureActive(Guid projectId, Guid featureId)
{
return GetAllWhere((activatedFeatures) => activatedFeatures.ProjectId == projectId
&& activatedFeatures.FeatureId == featureId).Count() >= 1;
}
public void ActivateFeature(Guid projectId, Guid featureId)
{
if (!IsFeatureActive(projectId, featureId))
{
Insert(new ActivatedFeature
{
ProjectId = projectId,
FeatureId = featureId
});
}
}
public void DeactivateFeature(Guid projectId, Guid featureId)
{
if (IsFeatureActive(projectId, featureId))
{
foreach(var feature in GetAllWhere((activatedFeatures) => activatedFeatures.FeatureId == featureId
&& activatedFeatures.ProjectId == projectId)) {
Delete(feature);
}
}
}
public void ActivateAllFeatures(Project project)
{
ActivateAllFeatures(project.Id);
}
public void ActivateAllFeatures(Guid projectId)
{
foreach (var feature in GetInactiveFeatures(projectId))
{
ActivateFeature(projectId, feature.Id);
}
}
public void DeactivateAllFeatures(Project project)
{
DeactivateAllFeatures(project.Id);
}
public void DeactivateAllFeatures(Guid projectId)
{
foreach (var feature in GetActiveFeatures(projectId))
{
DeactivateFeature(projectId, feature.Id);
}
}
public IEnumerable<Feature> GetInactiveFeatures(Project project)
{
return GetInactiveFeatures(project.Id);
}
public IEnumerable<Feature> GetInactiveFeatures(Guid projectId)
{
return DatabaseConnection.ConnectToDatabase((db) =>
{
return (
from features in db.Features
where !(
from activatedFeatures in db.ActivatedFeatures
join feature in db.Features on activatedFeatures.FeatureId equals feature.Id
join project in db.Projects on activatedFeatures.ProjectId equals project.Id
where project.Id == projectId
select feature
).Contains(features)
select features).Distinct().ToList();
});
}
public IEnumerable<Feature> GetActiveFeatures(Project project)
{
return GetActiveFeatures(project.Id);
}
public IEnumerable<Feature> GetActiveFeatures(Guid projectId)
{
return DatabaseConnection.ConnectToDatabase((db) =>
{
return (
from activatedFeatures in db.ActivatedFeatures
join feature in db.Features on activatedFeatures.FeatureId equals feature.Id
join project in db.Projects on activatedFeatures.ProjectId equals project.Id
where project.Id == projectId
select feature).Distinct().ToList();
});
}
}
}
......@@ -28,7 +28,7 @@ namespace Coscine.Database.Models
return
(from tableEntry in GetITableFromDatabase(db).AsExpandable()
where expression.Invoke(tableEntry) == id
select tableEntry).First();
select tableEntry).FirstOrDefault();
});
}
......@@ -39,7 +39,7 @@ namespace Coscine.Database.Models
return
(from tableEntry in GetITableFromDatabase(db).AsExpandable()
where whereClause.Invoke(tableEntry)
select tableEntry).First();
select tableEntry).FirstOrDefault();
});
}
......@@ -92,6 +92,5 @@ namespace Coscine.Database.Models
return db.Delete(databaseObject);
});
}
}
}
using Coscine.Database.DataModel;
using LinqToDB;
using System;
using System.Linq.Expressions;
namespace Coscine.Database.Models
{
public class FeaturesModel : DatabaseModel<Feature>
{
public override Expression<Func<Feature, Guid>> GetIdFromObject()
{
return databaseObject => databaseObject.Id;
}
public override ITable<Feature> GetITableFromDatabase(CoscineDB db)
{
return db.Features;
}
public override void SetObjectId(Feature databaseObject, Guid id)
{
databaseObject.Id = id;
}
}
}
......@@ -33,7 +33,7 @@ namespace Coscine.Database.Models
(from tableEntry in GetITableFromDatabase(db).AsExpandable()
where expression.Invoke(tableEntry) == id
&& tableEntry.Deleted == false
select tableEntry).First();
select tableEntry).FirstOrDefault();
});
}
......@@ -45,7 +45,7 @@ namespace Coscine.Database.Models
return
(from tableEntry in GetITableFromDatabase(db).AsExpandable()
where expression.Invoke(tableEntry) == id
select tableEntry).First();
select tableEntry).FirstOrDefault();
});
}
......@@ -57,7 +57,7 @@ namespace Coscine.Database.Models
(from tableEntry in GetITableFromDatabase(db).AsExpandable()
where whereClause.Invoke(tableEntry)
&& tableEntry.Deleted == false
select tableEntry).First();
select tableEntry).FirstOrDefault();
});
}
......@@ -86,7 +86,7 @@ namespace Coscine.Database.Models
public override int Update(Project databaseObject)
{
if (databaseObject.Deleted != false)
if (!databaseObject.Deleted)
{
return DatabaseConnection.ConnectToDatabase((db) =>
{
......@@ -116,6 +116,16 @@ namespace Coscine.Database.Models
});
}
public int HardDelete(Expression<Func<Project, bool>> whereClause)
{
return DatabaseConnection.ConnectToDatabase((db) =>
{
return db.Delete(from tableEntry in GetITableFromDatabase(db).AsExpandable()
where whereClause.Invoke(tableEntry)
select tableEntry);
});
}
public Project StoreFromObject(ProjectObject projectObject, User user)
{
if (projectObject.Disciplines.Count() == 0 || projectObject.Institutes.Count() == 0)
......
......@@ -9,8 +9,8 @@ using System.Reflection;
[assembly: AssemblyDescription("Database is a part of the CoScInE group.")]
[assembly: AssemblyCompany("IT Center, RWTH Aachen University")]
[assembly: AssemblyProduct("Database")]
[assembly: AssemblyVersion("1.17.0")]
[assembly: AssemblyFileVersion("1.17.0")]
[assembly: AssemblyInformationalVersion("1.17.0-topic-671-readab0003")]
[assembly: AssemblyVersion("1.17.1")]
[assembly: AssemblyFileVersion("1.17.1")]
[assembly: AssemblyInformationalVersion("1.17.1-topic-672-toggle0015")]
[assembly: AssemblyCopyright("2020 IT Center, RWTH Aachen University")]
using Coscine.Database.DataModel;
using System;
namespace Coscine.Database.ReturnObjects
{
public class ActivatedFeatureObject : IReturnObject
{
public Guid Id { get; set; }
public Guid ProjectId { get; set; }
public Guid FeatureId { get; set; }
public ActivatedFeatureObject(Guid id, Guid projectId, Guid featureId)
{
Id = id;
ProjectId = projectId;
FeatureId = featureId;
}
public ActivatedFeatureObject(ActivatedFeature activatedFeature)
{
Id = activatedFeature.Id;
ProjectId = activatedFeature.ProjectId;
FeatureId = activatedFeature.FeatureId;
}
}
}
using Coscine.Database.DataModel;
using System;
namespace Coscine.Database.ReturnObjects
{
public class FeatureObject : IReturnObject
{
public Guid Id { get; set; }
public string SharepointId { get; set; }
public string En { get; set; }
public string De { get; set; }
public bool Activated { get; set; }
public FeatureObject(Guid id, string sharepointId, string displaynameEn, string displaynameDe, bool activated = false)
{
Id = id;
SharepointId = sharepointId;
En = displaynameEn;
De = displaynameDe;
Activated = activated;
}
public FeatureObject(Feature feature, bool activated = false)
{
Id = feature.Id;
SharepointId = feature.SharepointId;
En = feature.DisplaynameEn;
De = feature.DisplaynameDe;
Activated = activated;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment