Compare commits
52 Commits
testsLouis
...
master
@ -1,2 +1,76 @@
|
||||
# Verax_API_EF
|
||||
<h1 align="center">Verax API EF</h1>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/C%23-239120.svg?style=for-the-badge&logo=c-sharp&logoColor=white" alt="C#"/>
|
||||
<img src="https://img.shields.io/badge/Entity%20Framework-512BD4.svg?style=for-the-badge&logo=entity-framework&logoColor=white" alt="Entity Framework"/>
|
||||
<img src="https://img.shields.io/badge/.NET-512BD4.svg?style=for-the-badge&logo=.net&logoColor=white" alt=".NET"/>
|
||||
<img src="https://img.shields.io/badge/SQL%20Server-E34F26.svg?style=for-the-badge&logo=microsoft-sql-server&logoColor=white" alt="SQL Server"/>
|
||||
|
||||
|
||||
<img src="https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=Verax_API_EF&metric=alert_status&token=09154b15417d84a94e809d60f1d5bb01654b5501" alt="Coverage"/>
|
||||
</p>
|
||||
|
||||
|
||||
## Introduction
|
||||
|
||||
Bienvenue sur le projet `Verax_API_EF`, une API RESTful développée spécifiquement pour faciliter la communication entre le site web et l'application Android du projet [Verax](https://codefirst.iut.uca.fr/git/Verax/Verax). Cette interface est conçue pour gérer efficacement les articles, les formulaires, et les utilisateurs.
|
||||
|
||||
## Technologies
|
||||
|
||||
- **.NET 8**: Le framework utilisé pour développer l'application.
|
||||
- **Entity Framework Core**: ORM utilisé pour l'accès et la gestion de la base de données.
|
||||
- **SQL Server**: Système de gestion de base de données recommandé (modifiable selon vos préférences).
|
||||
|
||||
## Configuration requise
|
||||
|
||||
- .NET 8.
|
||||
- Un IDE tel que Visual Studio, VS Code avec l'extension C#, ou JetBrains Rider pour le développement.
|
||||
|
||||
## Installation
|
||||
|
||||
1. **Cloner le projet** : Exécutez `git clone https://codefirst.iut.uca.fr/git/Verax/Verax_API_EF.git` pour cloner le dépôt dans votre espace de travail local.
|
||||
2. Ouvrez le fichier `Verax_API_EF.sln` avec votre IDE.
|
||||
3. Restaurez les packages nécessaires.
|
||||
4. Lancez le projet depuis IDE.
|
||||
|
||||
## Utilisation
|
||||
|
||||
Après avoir lancé l'API, elle sera accessible via `http://localhost:5000` par défaut. Voici quelques exemples de requêtes que vous pouvez effectuer :
|
||||
|
||||
- **Obtenir des articles** : `GET /articles`
|
||||
- **Ajouter un utilisateur** : `POST /user`
|
||||
- **Mettre à jour un article** : `PUT /article/{id}`
|
||||
- **Supprimer un formulaire** : `DELETE /formulaire/{id}`
|
||||
|
||||
## Problèmes pouvant être rencontrés
|
||||
|
||||
|
||||
### Migration
|
||||
|
||||
|
||||
- Lors de la création de la base de données, l'API s'appuie sur une migration incluse dans le projet `DbContextLib`. Si cette migration est absente, l'API ne fonctionnera pas correctement car la base de données sera vide, entraînant ainsi l'absence de données retournées. En cas de non présence de cette migration, vous devrez décommenter les lignes dans le fichier `LibraryContext.cs` du projet `DbContextLib` (aux alentours de la ligne 60), puis exécuter les commandes suivantes :
|
||||
|
||||
```bash
|
||||
dotnet ef migrations add mrg1 --project DbContextLib --context LibraryContext
|
||||
```
|
||||
|
||||
PS: N'oubliez pas de supprimer l'ancienne base de données dans le projet API et de recommenter les lignes dans le fichier `LibraryContext.cs`
|
||||
|
||||
|
||||
|
||||
### Tests Console API
|
||||
- Pour exécuter les tests console de l'API, assurez-vous au préalable que l'API est en cours d'exécution sur votre machine. Il est également crucial de vérifier que le port utilisé par l'application correspond à celui spécifié dans les configurations des tests. Cette vérification garantit que les tests peuvent interagir correctement avec l'API et fournir des résultats fiables.
|
||||
|
||||
|
||||
|
||||
## Equipe de développement
|
||||
<p align="center" >
|
||||
|
||||
<a href="https://codefirst.iut.uca.fr/git/louis.laborie" style="margin-right: 20px;">
|
||||
<img src="img/Louis.png" width="50" height="50" title="Louis Laborie" alt="Louis Laborie"/>
|
||||
</a>
|
||||
<a href="https://codefirst.iut.uca.fr/git/tony.fages" style="margin-right: 20px;">
|
||||
<img src="img/Tony.png" width="50" height="50" title="Tony Fages" alt="Tony Fages"/>
|
||||
</a>
|
||||
<p>
|
||||
|
||||
|
@ -1,507 +0,0 @@
|
||||
# ---> macOS
|
||||
# General
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
# ---> VisualStudio
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.tlog
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
|
||||
*.vbp
|
||||
|
||||
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
|
||||
*.dsw
|
||||
*.dsp
|
||||
|
||||
# Visual Studio 6 technical files
|
||||
*.ncb
|
||||
*.aps
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
|
||||
# Visual Studio History (VSHistory) files
|
||||
.vshistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
|
||||
# VS Code files for those working on multiple tools
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
*.code-workspace
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
|
||||
# Windows Installer files from build outputs
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# JetBrains Rider
|
||||
*.sln.iml
|
||||
|
||||
# ---> JetBrains
|
||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||
|
||||
# User-specific stuff
|
||||
.idea/**/workspace.xml
|
||||
.idea/**/tasks.xml
|
||||
.idea/**/usage.statistics.xml
|
||||
.idea/**/dictionaries
|
||||
.idea/**/shelf
|
||||
|
||||
# AWS User-specific
|
||||
.idea/**/aws.xml
|
||||
|
||||
# Generated files
|
||||
.idea/**/contentModel.xml
|
||||
|
||||
# Sensitive or high-churn files
|
||||
.idea/**/dataSources/
|
||||
.idea/**/dataSources.ids
|
||||
.idea/**/dataSources.local.xml
|
||||
.idea/**/sqlDataSources.xml
|
||||
.idea/**/dynamic.xml
|
||||
.idea/**/uiDesigner.xml
|
||||
.idea/**/dbnavigator.xml
|
||||
|
||||
# Gradle
|
||||
.idea/**/gradle.xml
|
||||
.idea/**/libraries
|
||||
|
||||
# Gradle and Maven with auto-import
|
||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||
# since they will be recreated, and may cause churn. Uncomment if using
|
||||
# auto-import.
|
||||
# .idea/artifacts
|
||||
# .idea/compiler.xml
|
||||
# .idea/jarRepositories.xml
|
||||
# .idea/modules.xml
|
||||
# .idea/*.iml
|
||||
# .idea/modules
|
||||
# *.iml
|
||||
# *.ipr
|
||||
|
||||
# CMake
|
||||
cmake-build-*/
|
||||
|
||||
# Mongo Explorer plugin
|
||||
.idea/**/mongoSettings.xml
|
||||
|
||||
# File-based project format
|
||||
*.iws
|
||||
|
||||
# IntelliJ
|
||||
out/
|
||||
|
||||
# mpeltonen/sbt-idea plugin
|
||||
.idea_modules/
|
||||
|
||||
# JIRA plugin
|
||||
atlassian-ide-plugin.xml
|
||||
|
||||
# Cursive Clojure plugin
|
||||
.idea/replstate.xml
|
||||
|
||||
# SonarLint plugin
|
||||
.idea/sonarlint/
|
||||
|
||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||
com_crashlytics_export_strings.xml
|
||||
crashlytics.properties
|
||||
crashlytics-build.properties
|
||||
fabric.properties
|
||||
|
||||
# Editor-based Rest Client
|
||||
.idea/httpRequests
|
||||
|
||||
# Android studio 3.1+ serialized cache file
|
||||
.idea/caches/build_file_checksums.ser
|
||||
|
Binary file not shown.
Binary file not shown.
@ -0,0 +1,85 @@
|
||||
Private property of Exodus: 16477@macbook-pro-de-fages.home
|
||||
|
||||
jetbrains.exodus.io.LockingManager.lock(LockingManager.kt:88)
|
||||
jetbrains.exodus.io.LockingManager.lock(LockingManager.kt:39)
|
||||
jetbrains.exodus.io.FileDataWriter.lock(FileDataWriter.kt:70)
|
||||
jetbrains.exodus.log.Log.tryLock(Log.kt:804)
|
||||
jetbrains.exodus.log.Log.<init>(Log.kt:117)
|
||||
jetbrains.exodus.env.Environments.newLogInstance(Environments.kt:117)
|
||||
jetbrains.exodus.env.Environments.newLogInstance(Environments.kt:81)
|
||||
jetbrains.exodus.env.Environments.newLogInstance(Environments.kt:77)
|
||||
jetbrains.exodus.env.Environments$newInstance$4.invoke(Environments.kt:46)
|
||||
jetbrains.exodus.env.Environments$newInstance$4.invoke(Environments.kt:46)
|
||||
jetbrains.exodus.env.Environments.prepare(Environments.kt:120)
|
||||
jetbrains.exodus.env.Environments.newInstance(Environments.kt:46)
|
||||
kotlinx.dnq.store.container.EntityStoreHelperKt.createTransientEntityStore(EntityStoreHelper.kt:40)
|
||||
kotlinx.dnq.store.container.EntityStoreHelperKt.createTransientEntityStore(EntityStoreHelper.kt:31)
|
||||
kotlinx.dnq.store.container.EntityStoreHelperKt.createTransientEntityStore$default(EntityStoreHelper.kt:30)
|
||||
com.github.copilot.chat.session.persistence.xodus.XdChatSessionPersistenceService.initStore(XdChatSessionPersistenceService.kt:115)
|
||||
com.github.copilot.chat.session.persistence.xodus.XdChatSessionPersistenceService.<init>(XdChatSessionPersistenceService.kt:22)
|
||||
com.github.copilot.chat.session.persistence.xodus.XdChatSessionPersistenceService.<init>(XdChatSessionPersistenceService.kt:15)
|
||||
com.github.copilot.chat.session.persistence.ChatSessionPersistenceServiceKt.ChatSessionPersistenceService(ChatSessionPersistenceService.kt:43)
|
||||
com.github.copilot.chat.session.persistence.ChatSessionPersistenceServiceKt.chatSessionsPersistenceService(ChatSessionPersistenceService.kt:53)
|
||||
com.github.copilot.chat.session.ChatSessionManager.<init>(ChatSessionManager.kt:45)
|
||||
com.github.copilot.chat.session.ChatSessionManager.<init>(ChatSessionManager.kt:25)
|
||||
com.github.copilot.chat.window.CopilotChatToolWindow.onCopilotReady(CopilotChatToolWindow.kt:133)
|
||||
com.github.copilot.chat.window.CopilotChatToolWindow.access$onCopilotReady(CopilotChatToolWindow.kt:40)
|
||||
com.github.copilot.chat.window.CopilotChatToolWindow$initCopilotStatusListener$1.invoke(CopilotChatToolWindow.kt:118)
|
||||
com.github.copilot.chat.window.CopilotChatToolWindow$initCopilotStatusListener$1.invoke(CopilotChatToolWindow.kt:115)
|
||||
com.github.copilot.status.CopilotAuthStatusKt.subscribeToCopilotAuthStatus(CopilotAuthStatus.kt:27)
|
||||
com.github.copilot.chat.window.CopilotChatToolWindow.initCopilotStatusListener(CopilotChatToolWindow.kt:115)
|
||||
com.github.copilot.chat.window.CopilotChatToolWindow.<init>(CopilotChatToolWindow.kt:59)
|
||||
com.github.copilot.chat.window.CopilotChatToolWindow.<init>(CopilotChatToolWindow.kt:40)
|
||||
com.github.copilot.chat.window.CopilotChatToolWindowFactory.init(CopilotChatToolWindowFactory.kt:18)
|
||||
com.intellij.openapi.wm.impl.ToolWindowManagerImpl.registerToolWindow$intellij_platform_ide_impl(ToolWindowManagerImpl.kt:1123)
|
||||
com.intellij.toolWindow.ToolWindowSetInitializerKt.registerToolWindows(ToolWindowSetInitializer.kt:223)
|
||||
com.intellij.toolWindow.ToolWindowSetInitializerKt.access$registerToolWindows(ToolWindowSetInitializer.kt:1)
|
||||
com.intellij.toolWindow.ToolWindowSetInitializer$createAndLayoutToolWindows$entries$1$1.invokeSuspend(ToolWindowSetInitializer.kt:141)
|
||||
com.intellij.toolWindow.ToolWindowSetInitializer$createAndLayoutToolWindows$entries$1$1.invoke(ToolWindowSetInitializer.kt)
|
||||
com.intellij.toolWindow.ToolWindowSetInitializer$createAndLayoutToolWindows$entries$1$1.invoke(ToolWindowSetInitializer.kt)
|
||||
kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:78)
|
||||
kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:167)
|
||||
kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
|
||||
com.intellij.platform.diagnostic.telemetry.impl.TracerKt.span(tracer.kt:53)
|
||||
com.intellij.platform.diagnostic.telemetry.impl.TracerKt.span$default(tracer.kt:49)
|
||||
com.intellij.toolWindow.ToolWindowSetInitializer$createAndLayoutToolWindows$entries$1.invokeSuspend(ToolWindowSetInitializer.kt:138)
|
||||
kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
|
||||
kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108)
|
||||
com.intellij.openapi.application.TransactionGuardImpl$1.run(TransactionGuardImpl.java:194)
|
||||
com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:843)
|
||||
com.intellij.openapi.application.impl.ApplicationImpl$4.run(ApplicationImpl.java:463)
|
||||
com.intellij.openapi.application.impl.RwLockHolder.runWithEnabledImplicitRead(RwLockHolder.kt:75)
|
||||
com.intellij.openapi.application.impl.RwLockHolder.runWithImplicitRead(RwLockHolder.kt:67)
|
||||
com.intellij.openapi.application.impl.ApplicationImpl.runWithImplicitRead(ApplicationImpl.java:1436)
|
||||
com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:82)
|
||||
com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:124)
|
||||
com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:44)
|
||||
java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
|
||||
java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:792)
|
||||
java.desktop/java.awt.EventQueue$3.run(EventQueue.java:739)
|
||||
java.desktop/java.awt.EventQueue$3.run(EventQueue.java:733)
|
||||
java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
|
||||
java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
|
||||
java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:761)
|
||||
com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.kt:695)
|
||||
com.intellij.ide.IdeEventQueue._dispatchEvent$lambda$12(IdeEventQueue.kt:589)
|
||||
com.intellij.openapi.application.impl.RwLockHolder.runWithoutImplicitRead(RwLockHolder.kt:44)
|
||||
com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.kt:589)
|
||||
com.intellij.ide.IdeEventQueue.access$_dispatchEvent(IdeEventQueue.kt:72)
|
||||
com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.compute(IdeEventQueue.kt:355)
|
||||
com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.compute(IdeEventQueue.kt:354)
|
||||
com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:793)
|
||||
com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1.invoke(IdeEventQueue.kt:354)
|
||||
com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1.invoke(IdeEventQueue.kt:349)
|
||||
com.intellij.ide.IdeEventQueueKt.performActivity$lambda$1(IdeEventQueue.kt:1014)
|
||||
com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:106)
|
||||
com.intellij.ide.IdeEventQueueKt.performActivity(IdeEventQueue.kt:1014)
|
||||
com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$7(IdeEventQueue.kt:349)
|
||||
com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:848)
|
||||
com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:391)
|
||||
java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
|
||||
java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
|
||||
java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
|
||||
java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
|
||||
java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
|
||||
java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RiderProjectSettingsUpdater">
|
||||
<option name="vcsConfiguration" value="2" />
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,143 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AutoGeneratedRunConfigurationManager">
|
||||
<projectFile profileName="http">API/API.csproj</projectFile>
|
||||
<projectFile profileName="https">API/API.csproj</projectFile>
|
||||
<projectFile>API_Tests_Console/API_Tests_Console.csproj</projectFile>
|
||||
<projectFile>Test_Console_EF/Test_Console_EF.csproj</projectFile>
|
||||
</component>
|
||||
<component name="AutoImportSettings">
|
||||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="454eaf08-7244-4002-811f-5409ccfe6a2a" name="Changes" comment="">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/.idea.Verax_API_EF/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.Verax_API_EF/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API/log.txt" beforeDir="false" afterPath="$PROJECT_DIR$/API/log.txt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Tests_Console/Tests_Console_Connect_API.cs" beforeDir="false" afterPath="$PROJECT_DIR$/API_Tests_Console/Tests_Console_Connect_API.cs" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Tests_Console/Tests_Console_Connect_Localhost.cs" beforeDir="false" afterPath="$PROJECT_DIR$/API_Tests_Console/Tests_Console_Connect_Localhost.cs" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
|
||||
</component>
|
||||
<component name="MetaFilesCheckinStateConfiguration" checkMetaFiles="true" />
|
||||
<component name="ProjectColorInfo">{
|
||||
"associatedIndex": 0
|
||||
}</component>
|
||||
<component name="ProjectId" id="2eXuZ2IMoPdjqkvkhUH8MxoFt4X" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent"><![CDATA[{
|
||||
"keyToString": {
|
||||
".NET Launch Settings Profile.API: http.executor": "Run",
|
||||
".NET Project.API_Tests_Console.executor": "Run",
|
||||
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"git-widget-placeholder": "master",
|
||||
"node.js.detected.package.eslint": "true",
|
||||
"node.js.detected.package.tslint": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
},
|
||||
"keyToStringList": {
|
||||
"rider.external.source.directories": [
|
||||
"/Users/tonyfages/Library/Application Support/JetBrains/Rider2023.3/resharper-host/DecompilerCache",
|
||||
"/Users/tonyfages/Library/Application Support/JetBrains/Rider2023.3/resharper-host/SourcesCache",
|
||||
"/Users/tonyfages/.local/share/Symbols/src"
|
||||
]
|
||||
}
|
||||
}]]></component>
|
||||
<component name="RunManager" selected=".NET Project.API_Tests_Console">
|
||||
<configuration name="API_Tests_Console" type="DotNetProject" factoryName=".NET Project">
|
||||
<option name="EXE_PATH" value="" />
|
||||
<option name="PROGRAM_PARAMETERS" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="PASS_PARENT_ENVS" value="1" />
|
||||
<option name="USE_EXTERNAL_CONSOLE" value="0" />
|
||||
<option name="USE_MONO" value="0" />
|
||||
<option name="RUNTIME_ARGUMENTS" value="" />
|
||||
<option name="PROJECT_PATH" value="$PROJECT_DIR$/API_Tests_Console/API_Tests_Console.csproj" />
|
||||
<option name="PROJECT_EXE_PATH_TRACKING" value="1" />
|
||||
<option name="PROJECT_ARGUMENTS_TRACKING" value="1" />
|
||||
<option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="1" />
|
||||
<option name="PROJECT_KIND" value="DotNetCore" />
|
||||
<option name="PROJECT_TFM" value="" />
|
||||
<method v="2">
|
||||
<option name="Build" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="Test_Console_EF" type="DotNetProject" factoryName=".NET Project">
|
||||
<option name="EXE_PATH" value="" />
|
||||
<option name="PROGRAM_PARAMETERS" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="PASS_PARENT_ENVS" value="1" />
|
||||
<option name="USE_EXTERNAL_CONSOLE" value="0" />
|
||||
<option name="USE_MONO" value="0" />
|
||||
<option name="RUNTIME_ARGUMENTS" value="" />
|
||||
<option name="PROJECT_PATH" value="$PROJECT_DIR$/Test_Console_EF/Test_Console_EF.csproj" />
|
||||
<option name="PROJECT_EXE_PATH_TRACKING" value="1" />
|
||||
<option name="PROJECT_ARGUMENTS_TRACKING" value="1" />
|
||||
<option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="1" />
|
||||
<option name="PROJECT_KIND" value="DotNetCore" />
|
||||
<option name="PROJECT_TFM" value="" />
|
||||
<method v="2">
|
||||
<option name="Build" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="API: http" type="LaunchSettings" factoryName=".NET Launch Settings Profile">
|
||||
<option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/API/API.csproj" />
|
||||
<option name="LAUNCH_PROFILE_TFM" value="net8.0" />
|
||||
<option name="LAUNCH_PROFILE_NAME" value="http" />
|
||||
<option name="USE_EXTERNAL_CONSOLE" value="0" />
|
||||
<option name="USE_MONO" value="0" />
|
||||
<option name="RUNTIME_ARGUMENTS" value="" />
|
||||
<option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" />
|
||||
<option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" />
|
||||
<option name="SEND_DEBUG_REQUEST" value="1" />
|
||||
<option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" />
|
||||
<method v="2">
|
||||
<option name="Build" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="API: https" type="LaunchSettings" factoryName=".NET Launch Settings Profile">
|
||||
<option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/API/API.csproj" />
|
||||
<option name="LAUNCH_PROFILE_TFM" value="net8.0" />
|
||||
<option name="LAUNCH_PROFILE_NAME" value="https" />
|
||||
<option name="USE_EXTERNAL_CONSOLE" value="0" />
|
||||
<option name="USE_MONO" value="0" />
|
||||
<option name="RUNTIME_ARGUMENTS" value="" />
|
||||
<option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" />
|
||||
<option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" />
|
||||
<option name="SEND_DEBUG_REQUEST" value="1" />
|
||||
<option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" />
|
||||
<method v="2">
|
||||
<option name="Build" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
||||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="454eaf08-7244-4002-811f-5409ccfe6a2a" name="Changes" comment="" />
|
||||
<created>1712063297753</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1712063297753</updated>
|
||||
<workItem from="1712063301685" duration="548000" />
|
||||
<workItem from="1712498505089" duration="6987000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
<component name="UnityCheckinConfiguration" checkUnsavedScenes="true" />
|
||||
</project>
|
@ -1,11 +1,13 @@
|
||||
using API_Mapping;
|
||||
using API_Services;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Model;
|
||||
|
||||
|
||||
namespace API.Controllers
|
||||
{
|
||||
[Authorize]
|
||||
[Route("api/[controller]")]
|
||||
[ApiController]
|
||||
public class ArticleController : ControllerBase
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,559 @@
|
||||
using System.Net.Http.Headers;
|
||||
|
||||
namespace API_Tests_Console;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using Entities;
|
||||
using Model;
|
||||
public class Tests_Console_Connect_API
|
||||
{
|
||||
|
||||
|
||||
// Cette section permet de tester d'API déployée sur le serveur codefirst de l'IUT
|
||||
|
||||
static readonly HttpClient client = new HttpClient();
|
||||
static string email = "verax@verax.com";
|
||||
static string password = "P@ssw0rd1";
|
||||
|
||||
public static async Task Main2(string[] args)
|
||||
{
|
||||
//await RegisterUser("verax@verax.com", "P@ssw0rd1");
|
||||
|
||||
// Ne pas commenter cette ligne
|
||||
string tokenAPI = await LoginAndGetToken(email, password);
|
||||
|
||||
|
||||
//await TestUser(tokenAPI);
|
||||
//await TestFormulaire(tokenAPI);
|
||||
await TestArticle(tokenAPI);
|
||||
}
|
||||
|
||||
private static async Task TestFormulaire(string tokenAPI)
|
||||
{
|
||||
await TestFormulaireGetAll(tokenAPI);
|
||||
await TestFormulaireGetId(tokenAPI);
|
||||
//await TestFormulaireCreate(tokenAPI);
|
||||
//await TestFormulaireDelete(tokenAPI);
|
||||
//await TestFormulaireUpdate(tokenAPI);
|
||||
}
|
||||
|
||||
private static async Task TestUser(string tokenAPI)
|
||||
{
|
||||
await TestUserGetAll(tokenAPI);
|
||||
await TestUserGetId(tokenAPI);
|
||||
await TestUserCreate(tokenAPI);
|
||||
//await TestUserDelete(tokenAPI);
|
||||
//await TestUserUpdate(tokenAPI);
|
||||
await TestGetAllArticleUser(tokenAPI);
|
||||
await TestGetArticleByUser(tokenAPI);
|
||||
//await TestCreateArticleUser(tokenAPI);
|
||||
//await TestDeleteArticleUser(tokenAPI);
|
||||
//await TestUpdateArticleUser(tokenAPI);
|
||||
}
|
||||
|
||||
|
||||
static async Task TestArticle(string tokenAPI)
|
||||
{
|
||||
await TestArticleGetId(tokenAPI);
|
||||
//await TestArticleCreate(tokenAPI);
|
||||
await TestArticleGetAll(tokenAPI);
|
||||
//await TestArticleDelete(tokenAPI);
|
||||
//await TestArticleUpdate(tokenAPI);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static async Task<string> LoginAndGetToken(string Email, string Password)
|
||||
{
|
||||
var credentials = new
|
||||
{
|
||||
email = Email,
|
||||
password = Password
|
||||
};
|
||||
|
||||
var json = JsonSerializer.Serialize(credentials);
|
||||
var data = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
|
||||
try
|
||||
{
|
||||
var response = await client.PostAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/login", data);
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
using (JsonDocument doc = JsonDocument.Parse(responseBody))
|
||||
{
|
||||
if (doc.RootElement.TryGetProperty("accessToken", out JsonElement tokenElement)) // Change "token" to the actual property name
|
||||
{
|
||||
string token = tokenElement.GetString();
|
||||
Console.WriteLine("Token retrieved");
|
||||
return token;
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Token not found in the response.");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"Login failed: {response.StatusCode}");
|
||||
Console.WriteLine(responseBody);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
catch (HttpRequestException e)
|
||||
{
|
||||
Console.WriteLine($"HttpRequestException: {e.Message}");
|
||||
return null;
|
||||
}
|
||||
catch (JsonException e)
|
||||
{
|
||||
Console.WriteLine($"Error parsing JSON response: {e.Message}");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static async Task<string> RegisterUser(string email, string password)
|
||||
{
|
||||
var newUser = new
|
||||
{
|
||||
email = email,
|
||||
password = password
|
||||
};
|
||||
|
||||
var json = JsonSerializer.Serialize(newUser);
|
||||
var data = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
|
||||
try
|
||||
{
|
||||
var response = await client.PostAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/register", data);
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
Console.WriteLine("Registration successful");
|
||||
Console.WriteLine(responseBody);
|
||||
return responseBody;
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"Registration failed: {response.StatusCode}");
|
||||
Console.WriteLine(responseBody);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
catch (HttpRequestException e)
|
||||
{
|
||||
Console.WriteLine($"HttpRequestException: {e.Message}");
|
||||
return null;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine($"General Exception: {e.Message}");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static async Task TestArticleGetAll(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var response = await client.GetAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/articles");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestArticleGetId(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var response = await client.GetAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/article/1");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestArticleCreate(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
var article = new Article()
|
||||
{
|
||||
Title = "Test",
|
||||
Description = "Test",
|
||||
Author = "Test",
|
||||
DatePublished = "Test",
|
||||
LectureTime = 0
|
||||
};
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var json = JsonSerializer.Serialize(article);
|
||||
var data = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
var response = await client.PostAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/article", data);
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestArticleDelete(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var response = await client.DeleteAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/article/1");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestArticleUpdate(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
var article = new Article()
|
||||
{
|
||||
Title = "Louis",
|
||||
Description = "Je",
|
||||
Author = "T'",
|
||||
DatePublished = "aime",
|
||||
LectureTime = 0
|
||||
};
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var json = JsonSerializer.Serialize(article);
|
||||
var data = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
var response = await client.PutAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/article/1", data);
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestFormulaireGetAll(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var response = await client.GetAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/formulaires");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestFormulaireGetId(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var response = await client.GetAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/formulaire/1");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestFormulaireCreate(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
var formulaire = new Formulaire()
|
||||
{
|
||||
Theme = "Test",
|
||||
Date = "Test",
|
||||
Lien = "Test",
|
||||
UserPseudo = "Sha"
|
||||
};
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var json = JsonSerializer.Serialize(formulaire);
|
||||
var data = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
var response = await client.PostAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/formulaire", data);
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestFormulaireDelete(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var response = await client.DeleteAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/formulaire/5");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestFormulaireUpdate(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
var formulaire = new Formulaire()
|
||||
{
|
||||
Theme = "J'",
|
||||
Date = "aime",
|
||||
Lien = "Les",
|
||||
UserPseudo = "Sha"
|
||||
};
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var json = JsonSerializer.Serialize(formulaire);
|
||||
var data = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
var response = await client.PutAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/", data);
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestUserGetAll(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var response = await client.GetAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/users");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestUserGetId(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var response = await client.GetAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/user/Sha");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestUserCreate(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
var user = new User()
|
||||
{
|
||||
Pseudo = "J",
|
||||
Nom = "'",
|
||||
Prenom = "aime",
|
||||
Mail = "les",
|
||||
Mdp = "pieds",
|
||||
Role = "Admin"
|
||||
};
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var json = JsonSerializer.Serialize(user);
|
||||
var data = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
var response = await client.PostAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/user", data);
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestUserDelete(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var response = await client.DeleteAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/user/Sha");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestUserUpdate(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
var user = new User()
|
||||
{
|
||||
Pseudo = "Sha",
|
||||
Nom = "J'",
|
||||
Prenom = "aime",
|
||||
Mail = "les",
|
||||
Mdp = "pieds",
|
||||
Role = "Admin"
|
||||
};
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var json = JsonSerializer.Serialize(user);
|
||||
var data = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
var response = await client.PutAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/user/Sha", data);
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestGetAllArticleUser(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var response = await client.GetAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/article/users");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestGetArticleByUser(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var response = await client.GetAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/user/Sha/articles");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestCreateArticleUser(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
var articleUser = new ArticleUserEntity()
|
||||
{
|
||||
ArticleEntityId = 1,
|
||||
UserEntityPseudo = "Sha"
|
||||
};
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var json = JsonSerializer.Serialize(articleUser);
|
||||
var data = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
var response = await client.PostAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/user/article", data);
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestDeleteArticleUser(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
var response = await client.DeleteAsync("https://codefirst.iut.uca.fr/containers/Verax-verax-api/user/Sha/3");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static async Task TestUpdateArticleUser(string tokenAPI)
|
||||
{
|
||||
try
|
||||
{
|
||||
var articleUser = new ArticleUserEntity()
|
||||
{
|
||||
ArticleEntityId = 2,
|
||||
UserEntityPseudo = "Sha"
|
||||
};
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenAPI);
|
||||
long oldId = 3;
|
||||
var json = JsonSerializer.Serialize(articleUser);
|
||||
var data = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
var response = await client.PutAsync($"https://codefirst.iut.uca.fr/containers/Verax-verax-api/user/Sha/{oldId}", data);
|
||||
response.EnsureSuccessStatusCode();
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(responseBody);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0"/>
|
||||
<PackageReference Include="xunit" Version="2.4.2"/>
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.0">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\API_Mapping\API_Mapping.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
@ -0,0 +1,111 @@
|
||||
using API.Controllers;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Model;
|
||||
using Moq;
|
||||
|
||||
namespace API_Unit_Test;
|
||||
|
||||
public class ArticleControllerTests
|
||||
{
|
||||
private readonly Mock<IDataManager> _mockDataManager;
|
||||
private readonly Mock<ILogger<ArticleController>> _mockLogger;
|
||||
private readonly ArticleController _controller;
|
||||
|
||||
public ArticleControllerTests()
|
||||
{
|
||||
_mockDataManager = new Mock<IDataManager>();
|
||||
_mockLogger = new Mock<ILogger<ArticleController>>();
|
||||
_controller = new ArticleController(_mockDataManager.Object, _mockLogger.Object);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetAllArticles_ReturnsOk()
|
||||
{
|
||||
// Arrange
|
||||
_mockDataManager.Setup(dm => dm.ArticleService.GetAllArticles(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<ArticleOrderCriteria>()))
|
||||
.ReturnsAsync(new List<Article>());
|
||||
|
||||
// Act
|
||||
var result = await _controller.GetAllArticles();
|
||||
|
||||
// Assert
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetArticleById_ReturnsOk()
|
||||
{
|
||||
// Arrange
|
||||
var testArticleId = 1;
|
||||
_mockDataManager.Setup(dm => dm.ArticleService.GetArticleById(testArticleId))
|
||||
.ReturnsAsync(new Article { Id = testArticleId });
|
||||
|
||||
// Act
|
||||
var result = await _controller.GetArticleById(testArticleId);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CreateArticle_ReturnsOk()
|
||||
{
|
||||
// Arrange
|
||||
var article = new Article { Title = "Test" };
|
||||
_mockDataManager.Setup(dm => dm.ArticleService.CreateArticle(article))
|
||||
.ReturnsAsync(article);
|
||||
|
||||
// Act
|
||||
var result = await _controller.CreateArticle(article);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteArticle_ReturnsOk()
|
||||
{
|
||||
// Arrange
|
||||
var testArticleId = 1;
|
||||
_mockDataManager.Setup(dm => dm.ArticleService.DeleteArticle(testArticleId))
|
||||
.ReturnsAsync(new Article { Id = testArticleId });
|
||||
|
||||
// Act
|
||||
var result = await _controller.DeleteArticle(testArticleId);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task UpdateArticle_ReturnsOk()
|
||||
{
|
||||
// Arrange
|
||||
var testArticleId = 1;
|
||||
var article = new Article { Title = "Updated" };
|
||||
_mockDataManager.Setup(dm => dm.ArticleService.UpdateArticle(testArticleId, article))
|
||||
.ReturnsAsync(article);
|
||||
|
||||
// Act
|
||||
var result = await _controller.UpdateArticle(testArticleId, article);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetAllArticles_ThrowsException_ReturnsBadRequest()
|
||||
{
|
||||
// Arrange
|
||||
_mockDataManager.Setup(dm => dm.ArticleService.GetAllArticles(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<ArticleOrderCriteria>()))
|
||||
.ThrowsAsync(new Exception("Test exception"));
|
||||
|
||||
// Act
|
||||
var result = await _controller.GetAllArticles();
|
||||
|
||||
// Assert
|
||||
Assert.IsType<BadRequestObjectResult>(result);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
using Web_API.Model;
|
||||
|
||||
namespace API_Unit_Test;
|
||||
|
||||
public class ArticleDTOTests
|
||||
{
|
||||
[Fact]
|
||||
public void ArticleDTOPropertiesTest()
|
||||
{
|
||||
// Arrange
|
||||
var articleDTO = new ArticleDTO();
|
||||
var testId = 1L;
|
||||
var testTitle = "Test Title";
|
||||
var testDescription = "Test Description";
|
||||
var testDatePublished = "2024-03-16";
|
||||
var testLectureTime = 5;
|
||||
var testAuthor = "Test Author";
|
||||
|
||||
// Act
|
||||
articleDTO.Id = testId;
|
||||
articleDTO.Title = testTitle;
|
||||
articleDTO.Description = testDescription;
|
||||
articleDTO.DatePublished = testDatePublished;
|
||||
articleDTO.LectureTime = testLectureTime;
|
||||
articleDTO.Author = testAuthor;
|
||||
|
||||
// Assert
|
||||
Assert.Equal(testId, articleDTO.Id);
|
||||
Assert.Equal(testTitle, articleDTO.Title);
|
||||
Assert.Equal(testDescription, articleDTO.Description);
|
||||
Assert.Equal(testDatePublished, articleDTO.DatePublished);
|
||||
Assert.Equal(testLectureTime, articleDTO.LectureTime);
|
||||
Assert.Equal(testAuthor, articleDTO.Author);
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
using API_Mapping;
|
||||
using Model;
|
||||
using Web_API.Model;
|
||||
|
||||
namespace API_UnitTest_Mapper;
|
||||
|
||||
public class ArticleMapperTests
|
||||
{
|
||||
[Fact]
|
||||
public void ToDTOMapsCorrectly()
|
||||
{
|
||||
var article = new Article
|
||||
{
|
||||
Id = 1,
|
||||
Title = "Test Article",
|
||||
Description = "Test Description",
|
||||
DatePublished = "2021-01-01",
|
||||
LectureTime = 5,
|
||||
Author = "Test Author"
|
||||
};
|
||||
var dto = ArticleMapper.ToDTO(article);
|
||||
|
||||
Assert.NotNull(dto);
|
||||
Assert.Equal(article.Id, dto.Id);
|
||||
Assert.Equal(article.Title, dto.Title);
|
||||
Assert.Equal(article.Description, dto.Description);
|
||||
Assert.Equal(article.DatePublished, dto.DatePublished);
|
||||
Assert.Equal(article.LectureTime, dto.LectureTime);
|
||||
Assert.Equal(article.Author, dto.Author);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToModelMapsCorrectly()
|
||||
{
|
||||
var dto = new ArticleDTO
|
||||
{
|
||||
Id = 2,
|
||||
Title = "Another Test Article",
|
||||
Description = "Another Test Description",
|
||||
DatePublished = "2021-01-02",
|
||||
LectureTime = 10,
|
||||
Author = "Another Test Author"
|
||||
};
|
||||
|
||||
var article = ArticleMapper.ToModel(dto);
|
||||
|
||||
Assert.NotNull(article);
|
||||
Assert.Equal(dto.Id, article.Id);
|
||||
Assert.Equal(dto.Title, article.Title);
|
||||
Assert.Equal(dto.Description, article.Description);
|
||||
Assert.Equal(dto.DatePublished, article.DatePublished);
|
||||
Assert.Equal(dto.LectureTime, article.LectureTime);
|
||||
Assert.Equal(dto.Author, article.Author);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToDTONullArticleThrowsNullReferenceException()
|
||||
{
|
||||
Article article = null;
|
||||
|
||||
Assert.Throws<NullReferenceException>(() => ArticleMapper.ToDTO(article));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToModelNullArticleDTOThrowsNullReferenceException()
|
||||
{
|
||||
ArticleDTO dto = null;
|
||||
|
||||
Assert.Throws<NullReferenceException>(() => ArticleMapper.ToModel(dto));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,130 @@
|
||||
using DbContextLib;
|
||||
using DbDataManager;
|
||||
using Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Model;
|
||||
|
||||
namespace API_Unit_Test;
|
||||
|
||||
public class DbManagerArticleTests
|
||||
{
|
||||
private LibraryContext GetInMemoryDbContext()
|
||||
{
|
||||
var options = new DbContextOptionsBuilder<LibraryContext>()
|
||||
.UseInMemoryDatabase(databaseName: "LibraryDbForArticleInMemory" + Guid.NewGuid()) // Ensure a unique name for each test run
|
||||
.Options;
|
||||
var context = new LibraryContext(options);
|
||||
context.Database.EnsureDeleted();
|
||||
context.Database.EnsureCreated();
|
||||
return context;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetAllArticles_ReturnsArticlesWithSpecifiedOrder()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
context.ArticleSet.AddRange(
|
||||
new ArticleEntity { Title = "C", LectureTime = 30, DatePublished = "2024-03-16" },
|
||||
new ArticleEntity { Title = "A", LectureTime = 10, DatePublished = "2024-03-16"},
|
||||
new ArticleEntity { Title = "B", LectureTime = 20, DatePublished = "2024-03-16" }
|
||||
);
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerArticle(context);
|
||||
|
||||
// Act & Assert - Test ordering by title
|
||||
var articlesByTitle = await service.GetAllArticles(0, 10, ArticleOrderCriteria.ByTitle);
|
||||
Assert.Equal("A", articlesByTitle.First().Title);
|
||||
|
||||
// Test ordering by lecture time
|
||||
var articlesByLectureTime = await service.GetAllArticles(0, 10, ArticleOrderCriteria.ByLectureTime);
|
||||
Assert.Equal(10, articlesByLectureTime.First().LectureTime);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetArticleById_ReturnsCorrectArticle()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var expectedArticle = new ArticleEntity { Title = "Test Article", Id = 1 };
|
||||
context.ArticleSet.Add(expectedArticle);
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerArticle(context);
|
||||
|
||||
// Act
|
||||
var article = await service.GetArticleById(1);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(article);
|
||||
Assert.Equal("Test Article", article.Title);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CreateArticle_AddsNewArticleSuccessfully()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var service = new DbManagerArticle(context);
|
||||
var newArticle = new Article { Title = "New Article" };
|
||||
|
||||
// Act
|
||||
var createdArticle = await service.CreateArticle(newArticle);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(createdArticle);
|
||||
Assert.Equal("New Article", createdArticle.Title);
|
||||
Assert.Single(context.ArticleSet);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task UpdateArticle_UpdatesExistingArticleSuccessfully()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var originalArticle = new ArticleEntity { Id = 2, Title = "Original Title" };
|
||||
context.ArticleSet.Add(originalArticle);
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerArticle(context);
|
||||
var updatedArticle = new Article { Id = 2, Title = "Updated Title" };
|
||||
|
||||
// Act
|
||||
var result = await service.UpdateArticle(2, updatedArticle);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Updated Title", result.Title);
|
||||
Assert.Equal(2, result.Id);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteArticle_RemovesArticleSuccessfully()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var articleToDelete = new ArticleEntity { Id = 3, Title = "Delete Me" };
|
||||
context.ArticleSet.Add(articleToDelete);
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerArticle(context);
|
||||
|
||||
// Act
|
||||
var deletedArticle = await service.DeleteArticle(3);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(deletedArticle);
|
||||
Assert.DoesNotContain(context.ArticleSet, a => a.Id == 3);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,204 @@
|
||||
using DbContextLib;
|
||||
using DbDataManager;
|
||||
using Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Model;
|
||||
|
||||
namespace API_Unit_Test;
|
||||
|
||||
public class DbManagerFormulaireTests
|
||||
{
|
||||
private LibraryContext GetInMemoryDbContext()
|
||||
{
|
||||
var options = new DbContextOptionsBuilder<LibraryContext>()
|
||||
.UseInMemoryDatabase(databaseName: "LibraryDbForFormulaireInMemory" + Guid.NewGuid()) // Unique name for each test execution
|
||||
.Options;
|
||||
var context = new LibraryContext(options);
|
||||
context.Database.EnsureDeleted();
|
||||
context.Database.EnsureCreated();
|
||||
return context;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetAllForm_ReturnsForms_WithSpecifiedOrder()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
context.FormSet.AddRange(
|
||||
new FormEntity { Theme = "C", DatePublication = "2021-01-01", Link = "http://c.com", UserEntityPseudo = "user1" },
|
||||
new FormEntity { Theme = "A", DatePublication = "2021-01-01", Link = "http://a.com", UserEntityPseudo = "user2" },
|
||||
new FormEntity { Theme = "B", DatePublication = "2021-01-01", Link = "http://b.com", UserEntityPseudo = "user3" }
|
||||
);
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerFormulaire(context);
|
||||
|
||||
// Act & Assert - Test ordering by theme
|
||||
var formsByTheme = await service.GetAllForm(0, 10, FormOrderCriteria.ByTheme);
|
||||
Assert.Equal("A", formsByTheme.First().Theme);
|
||||
|
||||
// Test ordering by link
|
||||
var formsByLink = await service.GetAllForm(0, 10, FormOrderCriteria.ByLien);
|
||||
Assert.Equal("http://a.com", formsByLink.First().Lien);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetById_ReturnsCorrectForm()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var expectedForm = new FormEntity { Id = 1, Theme = "Test Form", Link = "http://test.com", UserEntityPseudo = "user1" };
|
||||
context.FormSet.Add(expectedForm);
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerFormulaire(context);
|
||||
|
||||
// Act
|
||||
var form = await service.GetById(1);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(form);
|
||||
Assert.Equal("Test Form", form.Theme);
|
||||
Assert.Equal("http://test.com", form.Lien);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CreateForm_AddsNewFormSuccessfully()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var service = new DbManagerFormulaire(context);
|
||||
var newForm = new Formulaire { Theme = "New Form", Lien = "http://newform.com", UserPseudo = "user1", Date = "2021-01-01"};
|
||||
|
||||
// Act
|
||||
var createdForm = await service.CreateForm(newForm);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(createdForm);
|
||||
Assert.Equal("New Form", createdForm.Theme);
|
||||
Assert.Equal("http://newform.com", createdForm.Lien);
|
||||
Assert.Single(context.FormSet);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task UpdateForm_UpdatesExistingFormSuccessfully()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var originalForm = new FormEntity { Id = 2, Theme = "Original Theme", Link = "http://original.com",UserEntityPseudo = "user1", DatePublication = "2021-01-01" };
|
||||
context.FormSet.Add(originalForm);
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerFormulaire(context);
|
||||
var updatedForm = new Formulaire { Id = 2, Theme = "Updated Theme", Lien = "http://updated.com" };
|
||||
|
||||
// Act
|
||||
var result = await service.UpdateForm(2, updatedForm);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Updated Theme", result.Theme);
|
||||
Assert.Equal("http://updated.com", result.Lien);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteForm_RemovesFormSuccessfully()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var formToDelete = new FormEntity { Id = 3, Theme = "Delete Me", Link = "http://delete.com", UserEntityPseudo = "user1" };
|
||||
context.FormSet.Add(formToDelete);
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerFormulaire(context);
|
||||
|
||||
// Act
|
||||
var deletedForm = await service.DeleteForm(3);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(deletedForm);
|
||||
Assert.DoesNotContain(context.FormSet, f => f.Id == 3);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetById_NonExistentId_ReturnsNull()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var service = new DbManagerFormulaire(context);
|
||||
|
||||
// Act
|
||||
var form = await service.GetById(999); // Assuming this ID doesn't exist
|
||||
|
||||
// Assert
|
||||
Assert.Null(form);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task UpdateForm_NonExistentForm_ReturnsNull()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var service = new DbManagerFormulaire(context);
|
||||
var nonExistentForm = new Formulaire { Id = 999, Theme = "Non-Existent Theme", UserPseudo = "user1" };
|
||||
|
||||
// Act
|
||||
var result = await service.UpdateForm(nonExistentForm.Id, nonExistentForm);
|
||||
|
||||
// Assert
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteForm_NonExistentId_ReturnsNull()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var service = new DbManagerFormulaire(context);
|
||||
|
||||
// Act
|
||||
var result = await service.DeleteForm(999); // Assuming this ID doesn't exist
|
||||
|
||||
// Assert
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetAllForm_InvalidCriteria_ReturnsAllWithoutOrder()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
context.FormSet.AddRange(
|
||||
new FormEntity { Theme = "C", DatePublication = "2021-01-01", Link = "http://c.com", UserEntityPseudo = "user1"},
|
||||
new FormEntity { Theme = "A", DatePublication = "2021-01-01", Link = "http://a.com", UserEntityPseudo = "user2"},
|
||||
new FormEntity { Theme = "B", DatePublication = "2021-01-01", Link = "http://b.com", UserEntityPseudo = "user3"}
|
||||
);
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerFormulaire(context);
|
||||
|
||||
// Act
|
||||
var forms = await service.GetAllForm(0, 10, (FormOrderCriteria)(-1));
|
||||
|
||||
// Assert
|
||||
Assert.Equal(3, forms.Count());
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
using DbContextLib;
|
||||
using DbDataManager;
|
||||
using Moq;
|
||||
|
||||
namespace API_Unit_Test;
|
||||
|
||||
public class DbManagerTests
|
||||
{
|
||||
[Fact]
|
||||
public void Constructor_WithoutParameters_InitializesServices()
|
||||
{
|
||||
// Arrange & Act
|
||||
var dbManager = new DbManager();
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(dbManager.ArticleService);
|
||||
Assert.NotNull(dbManager.UserService);
|
||||
Assert.NotNull(dbManager.FormulaireService);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Constructor_WithLibraryContextParameter_InitializesServicesWithGivenContext()
|
||||
{
|
||||
// Arrange
|
||||
var context = new Mock<LibraryContext>().Object;
|
||||
|
||||
// Act
|
||||
var dbManager = new DbManager(context);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(dbManager.ArticleService);
|
||||
Assert.NotNull(dbManager.UserService);
|
||||
Assert.NotNull(dbManager.FormulaireService);
|
||||
}
|
||||
}
|
@ -0,0 +1,250 @@
|
||||
using DbContextLib;
|
||||
using DbDataManager;
|
||||
using Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Model;
|
||||
|
||||
namespace API_Unit_Test;
|
||||
|
||||
public class DbManagerUserTests
|
||||
{
|
||||
private LibraryContext GetInMemoryDbContext()
|
||||
{
|
||||
var options = new DbContextOptionsBuilder<LibraryContext>()
|
||||
.UseInMemoryDatabase(databaseName: "LibraryDbInMemory")
|
||||
.Options;
|
||||
var dbContext = new LibraryContext(options);
|
||||
dbContext.Database.EnsureDeleted();
|
||||
dbContext.Database.EnsureCreated();
|
||||
return dbContext;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetAll_ReturnsCorrectUsers()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
context.UserSet.AddRange(new UserEntity { Pseudo = "user1" }, new UserEntity { Pseudo = "user2" });
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerUser(context);
|
||||
|
||||
// Act
|
||||
var users = await service.GetAll(0, 10, UserOrderCriteria.None);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(2, users.Count());
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetByPseudo_UserExists_ReturnsUser()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var pseudo = "user1";
|
||||
context.UserSet.Add(new UserEntity { Pseudo = pseudo });
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerUser(context);
|
||||
|
||||
// Act
|
||||
var user = await service.GetByPseudo(pseudo);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(user);
|
||||
Assert.Equal(pseudo, user.Pseudo);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Create_AddsUserSuccessfully()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var service = new DbManagerUser(context);
|
||||
var newUser = new User { Pseudo = "newUser", Nom = "Doe", Prenom = "John", Mdp = "password", Mail = "mail@mail.com", Role = "Admin" };
|
||||
|
||||
// Act
|
||||
var createdUser = await service.Create(newUser);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(createdUser);
|
||||
Assert.Equal("newUser", createdUser.Pseudo);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Update_UpdatesUserSuccessfully()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var pseudo = "userToUpdate";
|
||||
context.UserSet.Add(new UserEntity { Pseudo = pseudo });
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerUser(context);
|
||||
var updatedInfo = new User { Pseudo = pseudo, Nom = "UpdatedLastName" };
|
||||
|
||||
// Act
|
||||
var updatedUser = await service.Update(updatedInfo, pseudo);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(updatedUser);
|
||||
Assert.Equal("UpdatedLastName", updatedUser.Nom);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Delete_RemovesUserSuccessfully()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var pseudo = "userToDelete";
|
||||
context.UserSet.Add(new UserEntity { Pseudo = pseudo });
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerUser(context);
|
||||
|
||||
// Act
|
||||
var deletedUser = await service.Delete(pseudo);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(deletedUser);
|
||||
Assert.Empty(context.UserSet.Where(u => u.Pseudo == pseudo));
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetAllArticleUsers_ReturnsCorrectUsers()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var userPseudo = "user1";
|
||||
var articleId = 1L;
|
||||
context.UserSet.Add(new UserEntity { Pseudo = userPseudo });
|
||||
context.ArticleUserSet.Add(new ArticleUserEntity { UserEntityPseudo = userPseudo, ArticleEntityId = articleId });
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerUser(context);
|
||||
|
||||
// Act
|
||||
var users = await service.GetAllArticleUsers();
|
||||
|
||||
// Assert
|
||||
Assert.Single(users);
|
||||
Assert.Contains(users, u => u.Pseudo == userPseudo);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetArticleUser_ReturnsCorrectArticles()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var userPseudo = "userWithArticle";
|
||||
var articleId = 2L;
|
||||
context.UserSet.Add(new UserEntity { Pseudo = userPseudo });
|
||||
context.ArticleSet.Add(new ArticleEntity { Id = articleId, Title = "Test Article" });
|
||||
context.ArticleUserSet.Add(new ArticleUserEntity { UserEntityPseudo = userPseudo, ArticleEntityId = articleId });
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerUser(context);
|
||||
|
||||
// Act
|
||||
var articles = await service.GetArticleUser(userPseudo);
|
||||
|
||||
// Assert
|
||||
Assert.Single(articles);
|
||||
Assert.Contains(articles, a => a.Id == articleId);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CreateArticleUser_AddsRelationshipSuccessfully()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var userPseudo = "newUserForArticle";
|
||||
var articleId = 3L;
|
||||
context.UserSet.Add(new UserEntity { Pseudo = userPseudo });
|
||||
context.ArticleSet.Add(new ArticleEntity { Id = articleId, Title = "New Article" });
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerUser(context);
|
||||
var newArticleUser = new ArticleUserEntity { UserEntityPseudo = userPseudo, ArticleEntityId = articleId };
|
||||
|
||||
// Act
|
||||
var success = await service.CreateArticleUser(newArticleUser);
|
||||
|
||||
// Assert
|
||||
Assert.True(success);
|
||||
Assert.NotNull(context.ArticleUserSet.FirstOrDefault(au => au.UserEntityPseudo == userPseudo && au.ArticleEntityId == articleId));
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteArticleUser_RemovesRelationshipSuccessfully()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var userPseudo = "userToDeleteArticle";
|
||||
var articleId = 4L;
|
||||
context.UserSet.Add(new UserEntity { Pseudo = userPseudo });
|
||||
context.ArticleSet.Add(new ArticleEntity { Id = articleId });
|
||||
context.ArticleUserSet.Add(new ArticleUserEntity { UserEntityPseudo = userPseudo, ArticleEntityId = articleId });
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerUser(context);
|
||||
|
||||
// Act
|
||||
var success = await service.DeleteArticleUser(userPseudo, articleId);
|
||||
|
||||
// Assert
|
||||
Assert.True(success);
|
||||
Assert.DoesNotContain(context.ArticleUserSet, au => au.UserEntityPseudo == userPseudo && au.ArticleEntityId == articleId);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task UpdateArticleUser_UpdatesRelationshipSuccessfully()
|
||||
{
|
||||
using (var context = GetInMemoryDbContext())
|
||||
{
|
||||
// Arrange
|
||||
var userPseudo = "userToUpdateArticle";
|
||||
var originalArticleId = 5L;
|
||||
var newArticleId = 6L;
|
||||
context.UserSet.Add(new UserEntity { Pseudo = userPseudo });
|
||||
context.ArticleSet.Add(new ArticleEntity { Id = originalArticleId });
|
||||
context.ArticleSet.Add(new ArticleEntity { Id = newArticleId });
|
||||
context.ArticleUserSet.Add(new ArticleUserEntity { UserEntityPseudo = userPseudo, ArticleEntityId = originalArticleId });
|
||||
context.SaveChanges();
|
||||
|
||||
var service = new DbManagerUser(context);
|
||||
|
||||
// Act
|
||||
var success = await service.DeleteArticleUser(userPseudo, originalArticleId);
|
||||
Assert.True(success);
|
||||
|
||||
var updatedArticleUser = new ArticleUserEntity { UserEntityPseudo = userPseudo, ArticleEntityId = newArticleId };
|
||||
success = await service.CreateArticleUser(updatedArticleUser);
|
||||
|
||||
// Assert
|
||||
Assert.True(success);
|
||||
var relationship = context.ArticleUserSet.FirstOrDefault(au => au.UserEntityPseudo == userPseudo);
|
||||
Assert.NotNull(relationship);
|
||||
Assert.Equal(newArticleId, relationship.ArticleEntityId);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
using DbDataManager;
|
||||
using Entities;
|
||||
using Model;
|
||||
|
||||
namespace API_Unit_Test;
|
||||
|
||||
public class ExtensionsTests
|
||||
{
|
||||
[Fact]
|
||||
public void ArticleToEntityMapsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var article = new Article
|
||||
{
|
||||
Id = 1,
|
||||
Author = "Author",
|
||||
Description = "Description",
|
||||
Title = "Title",
|
||||
DatePublished = "2021-01-01",
|
||||
LectureTime = 10
|
||||
};
|
||||
|
||||
// Act
|
||||
var entity = article.ToEntity();
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(entity);
|
||||
Assert.Equal(article.Id, entity.Id);
|
||||
Assert.Equal(article.Author, entity.Author);
|
||||
Assert.Equal(article.Description, entity.Description);
|
||||
Assert.Equal(article.Title, entity.Title);
|
||||
Assert.Equal(article.DatePublished, entity.DatePublished);
|
||||
Assert.Equal(article.LectureTime, entity.LectureTime);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ArticleEntityToModelMapsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var entity = new ArticleEntity
|
||||
{
|
||||
Id = 1,
|
||||
Author = "Author",
|
||||
Description = "Description",
|
||||
Title = "Title",
|
||||
DatePublished = "2021-01-01",
|
||||
LectureTime = 10
|
||||
};
|
||||
|
||||
// Act
|
||||
var model = entity.ToModel();
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(model);
|
||||
Assert.Equal(entity.Id, model.Id);
|
||||
Assert.Equal(entity.Author, model.Author);
|
||||
Assert.Equal(entity.Description, model.Description);
|
||||
Assert.Equal(entity.Title, model.Title);
|
||||
Assert.Equal(entity.DatePublished, model.DatePublished);
|
||||
Assert.Equal(entity.LectureTime, model.LectureTime);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
using API_Mapping;
|
||||
using Model;
|
||||
using Web_API.Model;
|
||||
|
||||
namespace API_UnitTest_Mapper;
|
||||
|
||||
public class FormMapperTests
|
||||
{
|
||||
[Fact]
|
||||
public void ToDTOMapsCorrectly()
|
||||
{
|
||||
var formulaire = new Formulaire
|
||||
{
|
||||
Id = 1,
|
||||
Theme = "Test Theme",
|
||||
Date = "2021-01-01",
|
||||
Lien = "http://example.com",
|
||||
UserPseudo = "TestUser"
|
||||
};
|
||||
|
||||
var dto = FormulaireMapping.ToDTO(formulaire);
|
||||
|
||||
Assert.NotNull(dto);
|
||||
Assert.Equal(formulaire.Id, dto.Id);
|
||||
Assert.Equal(formulaire.Theme, dto.Theme);
|
||||
Assert.Equal(formulaire.Date, dto.Date);
|
||||
Assert.Equal(formulaire.Lien, dto.Lien);
|
||||
Assert.Equal(formulaire.UserPseudo, dto.UserPseudo);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToModelMapsCorrectly()
|
||||
{
|
||||
var dto = new FormulaireDTO
|
||||
{
|
||||
Id = 2,
|
||||
Theme = "Another Test Theme",
|
||||
Date = "2021-01-02",
|
||||
Lien = "http://anotherexample.com",
|
||||
UserPseudo = "AnotherTestUser"
|
||||
};
|
||||
|
||||
var formulaire = FormulaireMapping.ToModel(dto);
|
||||
|
||||
Assert.NotNull(formulaire);
|
||||
Assert.Equal(dto.Id, formulaire.Id);
|
||||
Assert.Equal(dto.Theme, formulaire.Theme);
|
||||
Assert.Equal(dto.Date, formulaire.Date);
|
||||
Assert.Equal(dto.Lien, formulaire.Lien);
|
||||
Assert.Equal(dto.UserPseudo, formulaire.UserPseudo);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToDTONullFormulaireThrowsNullReferenceException()
|
||||
{
|
||||
Formulaire formulaire = null;
|
||||
|
||||
Assert.Throws<NullReferenceException>(() => FormulaireMapping.ToDTO(formulaire));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToModelNullFormulaireDTOThrowsNullReferenceException()
|
||||
{
|
||||
FormulaireDTO dto = null;
|
||||
|
||||
Assert.Throws<NullReferenceException>(() => FormulaireMapping.ToModel(dto));
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,111 @@
|
||||
using API.Controllers;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Model;
|
||||
using Moq;
|
||||
|
||||
namespace API_Unit_Test;
|
||||
|
||||
public class FormulaireControllerTests
|
||||
{
|
||||
private readonly Mock<IDataManager> _mockDataManager;
|
||||
private readonly Mock<ILogger<FormulaireController>> _mockLogger;
|
||||
private readonly FormulaireController _controller;
|
||||
|
||||
public FormulaireControllerTests()
|
||||
{
|
||||
_mockDataManager = new Mock<IDataManager>();
|
||||
_mockLogger = new Mock<ILogger<FormulaireController>>();
|
||||
_controller = new FormulaireController(_mockDataManager.Object, _mockLogger.Object);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetAllForm_ReturnsOk()
|
||||
{
|
||||
// Arrange
|
||||
_mockDataManager.Setup(dm => dm.FormulaireService.GetAllForm(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<FormOrderCriteria>()))
|
||||
.ReturnsAsync(new List<Formulaire>());
|
||||
|
||||
// Act
|
||||
var result = await _controller.GetAllForm();
|
||||
|
||||
// Assert
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetById_ReturnsOk()
|
||||
{
|
||||
// Arrange
|
||||
var testFormId = 1L;
|
||||
_mockDataManager.Setup(dm => dm.FormulaireService.GetById(testFormId))
|
||||
.ReturnsAsync(new Formulaire { Id = testFormId });
|
||||
|
||||
// Act
|
||||
var result = await _controller.GetById(testFormId);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CreateForm_ReturnsOk()
|
||||
{
|
||||
// Arrange
|
||||
var form = new Formulaire { Theme = "Test" };
|
||||
_mockDataManager.Setup(dm => dm.FormulaireService.CreateForm(form))
|
||||
.ReturnsAsync(form);
|
||||
|
||||
// Act
|
||||
var result = await _controller.CreateForm(form);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteForm_ReturnsOk()
|
||||
{
|
||||
// Arrange
|
||||
var testFormId = 1L;
|
||||
_mockDataManager.Setup(dm => dm.FormulaireService.DeleteForm(testFormId))
|
||||
.ReturnsAsync(new Formulaire { Id = testFormId });
|
||||
|
||||
// Act
|
||||
var result = await _controller.DeleteForm(testFormId);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task UpdateForm_ReturnsOk()
|
||||
{
|
||||
// Arrange
|
||||
var testFormId = 1L;
|
||||
var form = new Formulaire { Theme = "Updated" };
|
||||
_mockDataManager.Setup(dm => dm.FormulaireService.UpdateForm(testFormId, form))
|
||||
.ReturnsAsync(form);
|
||||
|
||||
// Act
|
||||
var result = await _controller.UpdateForm(testFormId, form);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetAllForm_ThrowsException_ReturnsBadRequest()
|
||||
{
|
||||
// Arrange
|
||||
_mockDataManager.Setup(dm => dm.FormulaireService.GetAllForm(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<FormOrderCriteria>()))
|
||||
.ThrowsAsync(new Exception("Test exception"));
|
||||
|
||||
// Act
|
||||
var result = await _controller.GetAllForm();
|
||||
|
||||
// Assert
|
||||
Assert.IsType<BadRequestObjectResult>(result);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
using Web_API.Model;
|
||||
|
||||
namespace API_Unit_Test;
|
||||
|
||||
public class FormulaireDTOTests
|
||||
{
|
||||
[Fact]
|
||||
public void PropertiesTest()
|
||||
{
|
||||
// Arrange
|
||||
var formulaire = new FormulaireDTO
|
||||
{
|
||||
Id = 1,
|
||||
Theme = "Test Theme",
|
||||
Date = "2024-03-16",
|
||||
Lien = "http://example.com",
|
||||
UserPseudo = "TestUser"
|
||||
};
|
||||
|
||||
// Act & Assert
|
||||
Assert.Equal(1, formulaire.Id);
|
||||
Assert.Equal("Test Theme", formulaire.Theme);
|
||||
Assert.Equal("2024-03-16", formulaire.Date);
|
||||
Assert.Equal("http://example.com", formulaire.Lien);
|
||||
Assert.Equal("TestUser", formulaire.UserPseudo);
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
global using Xunit;
|
@ -0,0 +1,141 @@
|
||||
using API_Mapping;
|
||||
using API.Controllers;
|
||||
using Entities;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Model;
|
||||
using Moq;
|
||||
using Web_API.Model;
|
||||
|
||||
namespace API_Unit_Test;
|
||||
|
||||
public class UserControllerTests
|
||||
{
|
||||
private readonly Mock<IDataManager> _mockDataManager;
|
||||
private readonly Mock<ILogger<UserController>> _mockLogger;
|
||||
private readonly UserController _controller;
|
||||
|
||||
public UserControllerTests()
|
||||
{
|
||||
_mockDataManager = new Mock<IDataManager>();
|
||||
_mockLogger = new Mock<ILogger<UserController>>();
|
||||
_controller = new UserController(_mockDataManager.Object, _mockLogger.Object);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetAll_ReturnsOk()
|
||||
{
|
||||
_mockDataManager.Setup(dm => dm.UserService.GetAll(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<UserOrderCriteria>()))
|
||||
.ReturnsAsync(new List<User>());
|
||||
|
||||
var result = await _controller.GetAll();
|
||||
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetByPseudo_ReturnsOk()
|
||||
{
|
||||
var pseudo = "testUser";
|
||||
_mockDataManager.Setup(dm => dm.UserService.GetByPseudo(pseudo))
|
||||
.ReturnsAsync(new User { Pseudo = pseudo });
|
||||
|
||||
var result = await _controller.GetByPseudo(pseudo);
|
||||
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Create_ReturnsOk()
|
||||
{
|
||||
var user = new User { Pseudo = "newUser" };
|
||||
_mockDataManager.Setup(dm => dm.UserService.Create(user))
|
||||
.ReturnsAsync(user);
|
||||
|
||||
var result = await _controller.Create(user);
|
||||
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Update_ReturnsOk()
|
||||
{
|
||||
var pseudo = "existingUser";
|
||||
var user = new User { Pseudo = pseudo };
|
||||
_mockDataManager.Setup(dm => dm.UserService.Update(user, pseudo))
|
||||
.ReturnsAsync(user);
|
||||
|
||||
var result = await _controller.Update(user, pseudo);
|
||||
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Delete_ReturnsOk()
|
||||
{
|
||||
var pseudo = "deleteUser";
|
||||
_mockDataManager.Setup(dm => dm.UserService.Delete(pseudo))
|
||||
.ReturnsAsync(new User { Pseudo = pseudo });
|
||||
|
||||
var result = await _controller.Delete(pseudo);
|
||||
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public async Task Create_ThrowsException_ReturnsBadRequest()
|
||||
{
|
||||
var user = new User { Pseudo = "errorUser" };
|
||||
_mockDataManager.Setup(dm => dm.UserService.Create(user))
|
||||
.ThrowsAsync(new Exception("Test exception"));
|
||||
|
||||
var result = await _controller.Create(user);
|
||||
|
||||
Assert.IsType<BadRequestObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CreateArticleUser_ReturnsOk_WithNewArticleUser()
|
||||
{
|
||||
// Arrange
|
||||
var articleUser = new ArticleUserEntity { UserEntityPseudo = "User1", ArticleEntityId = 1 };
|
||||
_mockDataManager.Setup(m => m.UserService.CreateArticleUser(articleUser)).ReturnsAsync(true);
|
||||
|
||||
// Act
|
||||
var result = await _controller.CreateArticleUser(articleUser);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task UpdateArticleUser_ReturnsOk_WhenUpdated()
|
||||
{
|
||||
// Arrange
|
||||
var articleUser = new ArticleUserEntity { UserEntityPseudo = "User1", ArticleEntityId = 2 };
|
||||
_mockDataManager.Setup(m => m.UserService.DeleteArticleUser(It.IsAny<string>(), It.IsAny<long>())).ReturnsAsync(true);
|
||||
_mockDataManager.Setup(m => m.UserService.CreateArticleUser(It.IsAny<ArticleUserEntity>())).ReturnsAsync(true);
|
||||
|
||||
// Act
|
||||
var result = await _controller.UpdateArticleUser(articleUser, 1);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteArticleUser_ReturnsOk_WhenDeleted()
|
||||
{
|
||||
// Arrange
|
||||
_mockDataManager.Setup(m => m.UserService.DeleteArticleUser(It.IsAny<string>(), It.IsAny<long>())).ReturnsAsync(true);
|
||||
|
||||
// Act
|
||||
var result = await _controller.DeleteArticleUser("User1", 1);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
using Web_API.Model;
|
||||
|
||||
namespace API_Unit_Test;
|
||||
|
||||
public class UserDTOTests
|
||||
{
|
||||
[Fact]
|
||||
public void UserDTOPropertiesTest()
|
||||
{
|
||||
// Arrange
|
||||
var user = new UserDTO
|
||||
{
|
||||
Pseudo = "user1",
|
||||
Mdp = "password",
|
||||
Nom = "Doe",
|
||||
Prenom = "John",
|
||||
Mail = "john.doe@example.com",
|
||||
Role = "Admin"
|
||||
};
|
||||
|
||||
// Act & Assert
|
||||
Assert.Equal("user1", user.Pseudo);
|
||||
Assert.Equal("password", user.Mdp);
|
||||
Assert.Equal("Doe", user.Nom);
|
||||
Assert.Equal("John", user.Prenom);
|
||||
Assert.Equal("john.doe@example.com", user.Mail);
|
||||
Assert.Equal("Admin", user.Role);
|
||||
}
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
using API_Mapping;
|
||||
using Model;
|
||||
using Web_API.Model;
|
||||
|
||||
namespace API_UnitTest_Mapper;
|
||||
|
||||
public class UserMappingTests
|
||||
{
|
||||
[Fact]
|
||||
public void ToDTOMapsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var user = new User
|
||||
{
|
||||
Pseudo = "testUser",
|
||||
Mdp = "testPassword",
|
||||
Nom = "Doe",
|
||||
Prenom = "John",
|
||||
Mail = "john.doe@example.com",
|
||||
Role = "User"
|
||||
};
|
||||
|
||||
// Act
|
||||
var dto = UserMapping.ToDTO(user);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(dto);
|
||||
Assert.Equal(user.Pseudo, dto.Pseudo);
|
||||
Assert.Equal(user.Mdp, dto.Mdp);
|
||||
Assert.Equal(user.Nom, dto.Nom);
|
||||
Assert.Equal(user.Prenom, dto.Prenom);
|
||||
Assert.Equal(user.Mail, dto.Mail);
|
||||
Assert.Equal(user.Role, dto.Role);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToModelMapsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var dto = new UserDTO
|
||||
{
|
||||
Pseudo = "anotherTestUser",
|
||||
Mdp = "anotherTestPassword",
|
||||
Nom = "Smith",
|
||||
Prenom = "Jane",
|
||||
Mail = "jane.smith@example.com",
|
||||
Role = "Admin"
|
||||
};
|
||||
|
||||
// Act
|
||||
var user = UserMapping.ToModel(dto);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(user);
|
||||
Assert.Equal(dto.Pseudo, user.Pseudo);
|
||||
Assert.Equal(dto.Mdp, user.Mdp);
|
||||
Assert.Equal(dto.Nom, user.Nom);
|
||||
Assert.Equal(dto.Prenom, user.Prenom);
|
||||
Assert.Equal(dto.Mail, user.Mail);
|
||||
Assert.Equal(dto.Role, user.Role);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToDTONullUserThrowsNullReferenceException()
|
||||
{
|
||||
// Arrange
|
||||
User user = null;
|
||||
|
||||
// Act & Assert
|
||||
Assert.Throws<NullReferenceException>(() => UserMapping.ToDTO(user));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToModelNullUserDTOThrowsNullReferenceException()
|
||||
{
|
||||
// Arrange
|
||||
UserDTO dto = null;
|
||||
|
||||
// Act & Assert
|
||||
Assert.Throws<NullReferenceException>(() => UserMapping.ToModel(dto));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToDTOMapsCorrectlyWithEmptyUser()
|
||||
{
|
||||
// Arrange
|
||||
var user = new User();
|
||||
|
||||
// Act
|
||||
var dto = UserMapping.ToDTO(user);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(dto);
|
||||
Assert.Equal(user.Pseudo, dto.Pseudo);
|
||||
Assert.Equal(user.Mdp, dto.Mdp);
|
||||
Assert.Equal(user.Nom, dto.Nom);
|
||||
Assert.Equal(user.Prenom, dto.Prenom);
|
||||
Assert.Equal(user.Mail, dto.Mail);
|
||||
Assert.Equal(user.Role, dto.Role);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToModelMapsCorrectlyWithEmptyUserDTO()
|
||||
{
|
||||
// Arrange
|
||||
var dto = new UserDTO();
|
||||
|
||||
// Act
|
||||
var user = UserMapping.ToModel(dto);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(user);
|
||||
Assert.Equal(dto.Pseudo, user.Pseudo);
|
||||
Assert.Equal(dto.Mdp, user.Mdp);
|
||||
Assert.Equal(dto.Nom, user.Nom);
|
||||
Assert.Equal(dto.Prenom, user.Prenom);
|
||||
Assert.Equal(dto.Mail, user.Mail);
|
||||
Assert.Equal(dto.Role, user.Role);
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
|
||||
WORKDIR /app
|
||||
|
||||
EXPOSE 80
|
||||
EXPOSE 443
|
||||
EXPOSE 8080
|
||||
EXPOSE 8081
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
||||
ARG BUILD_CONFIGURATION=Release
|
||||
WORKDIR /src
|
||||
COPY ["API/API.csproj", "API/"]
|
||||
COPY ["API_DbDataManager/API_DbDataManager.csproj", "API_DbDataManager/"]
|
||||
COPY ["API_Services/API_Services.csproj", "API_Services/"]
|
||||
COPY ["Entities/Entities.csproj", "Entities/"]
|
||||
COPY ["Model/Model.csproj", "Model/"]
|
||||
COPY ["DbContextLib/DbContextLib.csproj", "DbContextLib/"]
|
||||
COPY ["StubbedContextLib/StubbedContextLib.csproj", "StubbedContextLib/"]
|
||||
COPY ["API_Mapping/API_Mapping.csproj", "API_Mapping/"]
|
||||
COPY ["API_Model/API_Model.csproj", "API_Model/"]
|
||||
RUN dotnet restore "API/API.csproj"
|
||||
COPY . .
|
||||
WORKDIR "/src/API"
|
||||
RUN dotnet build "API.csproj" -c $BUILD_CONFIGURATION -o /app/build
|
||||
|
||||
FROM build AS publish
|
||||
ARG BUILD_CONFIGURATION=Release
|
||||
RUN dotnet publish "API.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
|
||||
|
||||
|
||||
|
||||
FROM base AS final
|
||||
WORKDIR /app
|
||||
COPY --from=publish /app/publish .
|
||||
ENTRYPOINT ["dotnet", "API.dll"]
|
@ -1,5 +1,8 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Model;
|
||||
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
public enum ArticleOrderCriteria
|
||||
{
|
||||
None, ByTitle, ByAuthor, ByLectureTime, ByDatePublished, ByDescription
|
@ -1,5 +1,9 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Model;
|
||||
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
|
||||
public enum FormOrderCriteria
|
||||
{
|
||||
None, ByTheme, ByDate, ByPseudo, ByLien
|
@ -0,0 +1,9 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Model;
|
||||
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
public enum UserOrderCriteria
|
||||
{
|
||||
None, ByFirstName, ByLastName
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
# Verax_API_EF
|
||||
|
@ -1,15 +0,0 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Rider ignored files
|
||||
/.idea.Verax_API_EF.iml
|
||||
/contentModel.xml
|
||||
/projectSettingsUpdater.xml
|
||||
/modules.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
# GitHub Copilot persisted chat sessions
|
||||
/copilot/chatSessions
|
@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="" />
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,313 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AutoGeneratedRunConfigurationManager">
|
||||
<projectFile profileName="http">API/API.csproj</projectFile>
|
||||
<projectFile profileName="https">API/API.csproj</projectFile>
|
||||
<projectFile>API_Tests_Console/API_Tests_Console.csproj</projectFile>
|
||||
<projectFile>Test_Console_EF/Test_Console_EF.csproj</projectFile>
|
||||
</component>
|
||||
<component name="AutoImportSettings">
|
||||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="0b890b11-446c-405a-95d5-cd68743c4057" name="Changes" comment="">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/.idea.Verax_API_EF/.idea/.gitignore" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/.idea.Verax_API_EF/.idea/indexLayout.xml" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/.idea.Verax_API_EF/.idea/vcs.xml" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API/API.csproj" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API/API.http" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API/Controllers/ArticleController.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API/Controllers/FormulaireController.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API/Controllers/UserController.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API/Entity_FrameWork.Article.db" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API/Program.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API/Properties/launchSettings.json" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API/appsettings.Development.json" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API/appsettings.json" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API/log.txt" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_DbDataManager/API_DbDataManager.csproj" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_DbDataManager/DbManager.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_DbDataManager/DbManagerArticle.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_DbDataManager/DbManagerFormulaire.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_DbDataManager/DbManagerUser.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_DbDataManager/Extensions.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Mapping/API_Mapping.csproj" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Mapping/ArticleMapper.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Mapping/FormulaireMapping.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Mapping/UserMapping.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Model/API_Model.csproj" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Model/ArticleDTO.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Model/FormulaireDTO.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Model/UserDTO.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Services/API_Services.csproj" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Services/IArticleService.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Services/IDataManager.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Services/IFormulaireService.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Services/IUserService.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Tests_Console/API_Tests_Console.csproj" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Tests_Console/Tests_Console.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_UnitTest_Mapper/API_UnitTest_Mapper.csproj" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_UnitTest_Mapper/GlobalUsings.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/API_Unit_Test.csproj" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/ArticleControllerTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/ArticleDTOTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/ArticleMapperTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/DbManagerArticleTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/DbManagerFormulaireTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/DbManagerTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/DbManagerUserTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/ExtensionsTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/FormMapperTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/FormulaireControllerTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/FormulaireDTOTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/GlobalUsings.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/IArticleServiceTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/IFormServiceTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/IUserServiceTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/UserControllerTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/UserDTOTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/API_Unit_Test/UserMappingTests.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/DbContextLib/ApplicationDbContext.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/DbContextLib/DbContextLib.csproj" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/DbContextLib/LibraryContext.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/DbContextLib/Migrations/20240317095050_mrg1.Designer.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/DbContextLib/Migrations/20240317095050_mrg1.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/DbContextLib/Migrations/LibraryContextModelSnapshot.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Dockerfile" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Entities/ArticleEntity.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Entities/ArticleUserEntity.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Entities/Entities.csproj" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Entities/FormEntity.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Entities/UserEntity.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Model/Article.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Model/ArticleOrderCriteria.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Model/FormOrderCriteria.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Model/Formulaire.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Model/Model.csproj" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Model/User.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Model/UserOrderCriteria.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/StubbedContextLib/Class1.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/StubbedContextLib/StubbedContextLib.csproj" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Test_Console_EF/Entity_FrameWork.Article.db" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Test_Console_EF/Test_Console_EF.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Test_Console_EF/Test_Console_EF.csproj" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Test_Console_EF/log.txt" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Unit_Test_EF/TestsArticleEntity.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Unit_Test_EF/TestsArticleUserEntity.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Unit_Test_EF/TestsFormEntity.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Unit_Test_EF/TestsUserEntity.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Unit_Test_EF/Unit_Test_EF.csproj" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Verax_API_EF.sln" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Verax_API_EF/.idea/.idea.Verax_API_EF.dir/.idea/.gitignore" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Verax_API_EF/.idea/.idea.Verax_API_EF.dir/.idea/indexLayout.xml" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Verax_API_EF/.idea/.idea.Verax_API_EF.dir/.idea/vcs.xml" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Verax_API_EF/Program.cs" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Verax_API_EF/Verax_API_EF.csproj" beforeDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../.." />
|
||||
</component>
|
||||
<component name="MetaFilesCheckinStateConfiguration" checkMetaFiles="true" />
|
||||
<component name="ProblemsViewState">
|
||||
<option name="selectedTabId" value="Toolset" />
|
||||
</component>
|
||||
<component name="ProjectColorInfo">{
|
||||
"customColor": "",
|
||||
"associatedIndex": 8
|
||||
}</component>
|
||||
<component name="ProjectId" id="2eENYNJJTgbOpfWw136RJzo5ItR" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent"><![CDATA[{
|
||||
"keyToString": {
|
||||
".NET Launch Settings Profile.API: docker.executor": "Run",
|
||||
".NET Launch Settings Profile.API: http.executor": "Run",
|
||||
".NET Launch Settings Profile.API: https.executor": "Run",
|
||||
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"git-widget-placeholder": "rebase",
|
||||
"node.js.detected.package.eslint": "true",
|
||||
"node.js.detected.package.tslint": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
},
|
||||
"keyToStringList": {
|
||||
"rider.external.source.directories": [
|
||||
"/Users/tonyfages/Library/Application Support/JetBrains/Rider2023.3/resharper-host/DecompilerCache",
|
||||
"/Users/tonyfages/Library/Application Support/JetBrains/Rider2023.3/resharper-host/SourcesCache",
|
||||
"/Users/tonyfages/.local/share/Symbols/src"
|
||||
]
|
||||
}
|
||||
}]]></component>
|
||||
<component name="RunManager" selected=".NET Launch Settings Profile.API: https">
|
||||
<configuration name="API_Tests_Console" type="DotNetProject" factoryName=".NET Project">
|
||||
<option name="EXE_PATH" value="" />
|
||||
<option name="PROGRAM_PARAMETERS" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="PASS_PARENT_ENVS" value="1" />
|
||||
<option name="USE_EXTERNAL_CONSOLE" value="0" />
|
||||
<option name="USE_MONO" value="0" />
|
||||
<option name="RUNTIME_ARGUMENTS" value="" />
|
||||
<option name="PROJECT_PATH" value="$PROJECT_DIR$/API_Tests_Console/API_Tests_Console.csproj" />
|
||||
<option name="PROJECT_EXE_PATH_TRACKING" value="1" />
|
||||
<option name="PROJECT_ARGUMENTS_TRACKING" value="1" />
|
||||
<option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="1" />
|
||||
<option name="PROJECT_KIND" value="DotNetCore" />
|
||||
<option name="PROJECT_TFM" value="" />
|
||||
<method v="2">
|
||||
<option name="Build" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="Test_Console_EF" type="DotNetProject" factoryName=".NET Project">
|
||||
<option name="EXE_PATH" value="" />
|
||||
<option name="PROGRAM_PARAMETERS" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="PASS_PARENT_ENVS" value="1" />
|
||||
<option name="USE_EXTERNAL_CONSOLE" value="0" />
|
||||
<option name="USE_MONO" value="0" />
|
||||
<option name="RUNTIME_ARGUMENTS" value="" />
|
||||
<option name="PROJECT_PATH" value="$PROJECT_DIR$/Test_Console_EF/Test_Console_EF.csproj" />
|
||||
<option name="PROJECT_EXE_PATH_TRACKING" value="1" />
|
||||
<option name="PROJECT_ARGUMENTS_TRACKING" value="1" />
|
||||
<option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="1" />
|
||||
<option name="PROJECT_KIND" value="DotNetCore" />
|
||||
<option name="PROJECT_TFM" value="" />
|
||||
<method v="2">
|
||||
<option name="Build" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="API: Docker" type="LaunchSettings" factoryName=".NET Launch Settings Profile" temporary="true">
|
||||
<option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/API/API.csproj" />
|
||||
<option name="LAUNCH_PROFILE_TFM" value="net8.0" />
|
||||
<option name="LAUNCH_PROFILE_NAME" value="Docker" />
|
||||
<option name="USE_EXTERNAL_CONSOLE" value="0" />
|
||||
<option name="USE_MONO" value="0" />
|
||||
<option name="RUNTIME_ARGUMENTS" value="" />
|
||||
<option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" />
|
||||
<option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" />
|
||||
<option name="SEND_DEBUG_REQUEST" value="1" />
|
||||
<option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" />
|
||||
<method v="2">
|
||||
<option name="Build" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="API: docker" type="LaunchSettings" factoryName=".NET Launch Settings Profile" temporary="true">
|
||||
<option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/API/API.csproj" />
|
||||
<option name="LAUNCH_PROFILE_TFM" value="net8.0" />
|
||||
<option name="LAUNCH_PROFILE_NAME" value="docker" />
|
||||
<option name="USE_EXTERNAL_CONSOLE" value="0" />
|
||||
<option name="USE_MONO" value="0" />
|
||||
<option name="RUNTIME_ARGUMENTS" value="" />
|
||||
<option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" />
|
||||
<option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" />
|
||||
<option name="SEND_DEBUG_REQUEST" value="1" />
|
||||
<option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" />
|
||||
<method v="2">
|
||||
<option name="Build" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="API: http" type="LaunchSettings" factoryName=".NET Launch Settings Profile">
|
||||
<option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/API/API.csproj" />
|
||||
<option name="LAUNCH_PROFILE_TFM" value="net8.0" />
|
||||
<option name="LAUNCH_PROFILE_NAME" value="http" />
|
||||
<option name="USE_EXTERNAL_CONSOLE" value="0" />
|
||||
<option name="USE_MONO" value="0" />
|
||||
<option name="RUNTIME_ARGUMENTS" value="" />
|
||||
<option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" />
|
||||
<option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" />
|
||||
<option name="SEND_DEBUG_REQUEST" value="1" />
|
||||
<option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" />
|
||||
<method v="2">
|
||||
<option name="Build" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="API: https" type="LaunchSettings" factoryName=".NET Launch Settings Profile">
|
||||
<option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/API/API.csproj" />
|
||||
<option name="LAUNCH_PROFILE_TFM" value="net8.0" />
|
||||
<option name="LAUNCH_PROFILE_NAME" value="https" />
|
||||
<option name="USE_EXTERNAL_CONSOLE" value="0" />
|
||||
<option name="USE_MONO" value="0" />
|
||||
<option name="RUNTIME_ARGUMENTS" value="" />
|
||||
<option name="GENERATE_APPLICATIONHOST_CONFIG" value="1" />
|
||||
<option name="SHOW_IIS_EXPRESS_OUTPUT" value="0" />
|
||||
<option name="SEND_DEBUG_REQUEST" value="1" />
|
||||
<option name="ADDITIONAL_IIS_EXPRESS_ARGUMENTS" value="" />
|
||||
<method v="2">
|
||||
<option name="Build" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="../Dockerfile: Compose Deployment" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
|
||||
<deployment type="dockerfile">
|
||||
<settings>
|
||||
<option name="imageTag" value="api" />
|
||||
<option name="containerName" value="api" />
|
||||
<option name="contextFolderPath" value="$PROJECT_DIR$" />
|
||||
<option name="portBindings">
|
||||
<list>
|
||||
<DockerPortBindingImpl>
|
||||
<option name="containerPort" value="8080" />
|
||||
<option name="hostIp" value="127.0.0.1" />
|
||||
<option name="hostPort" value="8080" />
|
||||
</DockerPortBindingImpl>
|
||||
</list>
|
||||
</option>
|
||||
<option name="sourceFilePath" value="../Dockerfile" />
|
||||
</settings>
|
||||
</deployment>
|
||||
<EXTENSION ID="com.jetbrains.rider.docker.debug" isFastModeEnabled="true" isSslEnabled="false" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration default="true" type="docker-deploy" factoryName="dockerfile" temporary="true">
|
||||
<deployment type="dockerfile" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<recent_temporary>
|
||||
<list>
|
||||
<item itemvalue=".NET Launch Settings Profile.API: Docker" />
|
||||
<item itemvalue=".NET Launch Settings Profile.API: docker" />
|
||||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="0b890b11-446c-405a-95d5-cd68743c4057" name="Changes" comment="" />
|
||||
<created>1711465825676</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1711465825676</updated>
|
||||
<workItem from="1711465828197" duration="234000" />
|
||||
<workItem from="1711466068272" duration="848000" />
|
||||
<workItem from="1711468488298" duration="751000" />
|
||||
<workItem from="1712036968994" duration="2827000" />
|
||||
</task>
|
||||
<task id="LOCAL-00001" summary="Dockerfile">
|
||||
<option name="closed" value="true" />
|
||||
<created>1712038898812</created>
|
||||
<option name="number" value="00001" />
|
||||
<option name="presentableId" value="LOCAL-00001" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1712038898812</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="2" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
<component name="UnityCheckinConfiguration" checkUnsavedScenes="true" />
|
||||
<component name="VcsManagerConfiguration">
|
||||
<option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" />
|
||||
<MESSAGE value="Dockerfile" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="Dockerfile" />
|
||||
</component>
|
||||
</project>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue