aboutsummaryrefslogtreecommitdiff
path: root/src/Data/DevHive.Data.Tests/LenguageRepository.Tests.cs
blob: c7d4dc7b68d81ee01bf1fc53aaf5661cd755b066 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DevHive.Data.Models;
using DevHive.Data.Repositories;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;

namespace DevHive.Data.Tests
{
	[TestFixture]
	public class LenguageRepositoryTests
	{
		private const string LANGUAGE_NAME = "Language test name";
		private DevHiveContext _context;
		private LanguageRepository _languageRepository;

		#region Setups
		[SetUp]
		public void Setup()
		{
			DbContextOptionsBuilder<DevHiveContext> optionsBuilder = new DbContextOptionsBuilder<DevHiveContext>()
				.UseInMemoryDatabase(databaseName: "DevHive_Test_Database");

			this._context = new DevHiveContext(optionsBuilder.Options);

			this._languageRepository = new LanguageRepository(this._context);
		}

		[TearDown]
		public void TearDown()
		{
			this._context.Database.EnsureDeleted();
		}
		#endregion

		#region GetByNameAsync
		[Test]
		public async Task GetByNameAsync_ReturnsTheCorrectLanguage_IfItExists()
		{
			await this.AddEntity();

			Language language = this._context.Languages.Where(x => x.Name == LANGUAGE_NAME).AsEnumerable().FirstOrDefault();

			Language languageResult = await this._languageRepository.GetByNameAsync(LANGUAGE_NAME);

			Assert.AreEqual(language.Id, languageResult.Id);
		}

		[Test]
		public async Task GetByNameAsync_ReturnsNull_IfTechnologyDoesNotExists()
		{
			Language languageResult = await this._languageRepository.GetByNameAsync(LANGUAGE_NAME);

			Assert.IsNull(languageResult);
		}
		#endregion

		#region GetLanguages
		[Test]
		public async Task GetLanguages_ReturnsAllLanguages()
		{
			await this.AddEntity();
			await this.AddEntity("secondLanguage");
			await this.AddEntity("thirdLanguage");

			HashSet<Language> languages = this._languageRepository.GetLanguages();

			Assert.GreaterOrEqual(languages.Count, 3, "GetLanguages does not get all Languages");
		}
		#endregion

		#region DoesLanguageExistAsync
		[Test]
		public async Task DoesLanguageExist_ReturnsTrue_IfIdExists()
		{
			await this.AddEntity();
			Language language = this._context.Languages.Where(x => x.Name == LANGUAGE_NAME).AsEnumerable().FirstOrDefault();

			Guid id = language.Id;

			bool result = await this._languageRepository.DoesLanguageExistAsync(id);

			Assert.IsTrue(result, "DoesLanguageExistAsync returns flase when language exists");
		}

		[Test]
		public async Task DoesLanguageExist_ReturnsFalse_IfIdDoesNotExists()
		{
			Guid id = Guid.NewGuid();

			bool result = await this._languageRepository.DoesLanguageExistAsync(id);

			Assert.IsFalse(result, "DoesLanguageExistAsync returns true when language does not exist");
		}
		#endregion

		#region DoesTechnologyNameExistAsync
		[Test]
		public async Task DoesLanguageNameExist_ReturnsTrue_IfLanguageExists()
		{
			await this.AddEntity();

			bool result = await this._languageRepository.DoesLanguageNameExistAsync(LANGUAGE_NAME);

			Assert.IsTrue(result, "DoesLanguageNameExists returns true when language name does not exist");
		}

		[Test]
		public async Task DoesLanguageNameExist_ReturnsFalse_IfLanguageDoesNotExists()
		{
			bool result = await this._languageRepository.DoesLanguageNameExistAsync(LANGUAGE_NAME);

			Assert.False(result, "DoesTechnologyNameExistAsync returns true when language name does not exist");
		}
		#endregion

		#region HelperMethods
		private async Task AddEntity(string name = LANGUAGE_NAME)
		{
			Language language = new()
			{
				Id = Guid.NewGuid(),
				Name = name
			};

			await this._context.Languages.AddAsync(language);
			await this._context.SaveChangesAsync();
		}
		#endregion
	}
}