diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.css
new file mode 100644
index 0000000000..8b6fe32434
--- /dev/null
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.css
@@ -0,0 +1,4 @@
+.vs-blog .hero-section .hero-article-img {
+ min-height: 480px;
+ background: center center no-repeat;
+ background-size: cover; }
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.min.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.min.css
new file mode 100644
index 0000000000..9305116183
--- /dev/null
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.min.css
@@ -0,0 +1 @@
+.vs-blog .hero-section .hero-article-img{min-height:480px;background:center center no-repeat;background-size:cover;}
\ No newline at end of file
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.scss b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.scss
new file mode 100644
index 0000000000..d887474302
--- /dev/null
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.scss
@@ -0,0 +1,10 @@
+.vs-blog {
+ .hero-section {
+ .hero-article-img {
+ min-height: 480px;
+ background: center center no-repeat;
+ background-size: cover;
+ }
+
+ }
+}
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/New.cshtml.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/New.cshtml.cs
index 468d46decd..fe0a809d07 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/New.cshtml.cs
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/New.cshtml.cs
@@ -54,7 +54,7 @@ namespace Volo.Blogging.Pages.Blog.Posts
var postWithDetailsDto = await _postAppService.CreateAsync(ObjectMapper.Map
(Post));
//TODO: Try Url.Page(...)
- return Redirect(Url.Content($"~/blog/{blog.ShortName}/{postWithDetailsDto.Url}"));
+ return Redirect(Url.Content($"~/blog/{WebUtility.UrlEncode(blog.ShortName)}/{WebUtility.UrlEncode(postWithDetailsDto.Url)}"));
}
public class CreatePostViewModel
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/edit.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/edit.js
index 9fb4929d30..6b0dd9f02b 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/edit.js
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/edit.js
@@ -1,4 +1,4 @@
-(function ($) {
+$(function () {
var $container = $("#edit-post-container");
var $editorContainer = $container.find(".edit-post-editor");
@@ -72,6 +72,8 @@
load: function () {
$editorContainer.find(".loading-cover").remove();
$submitButton.prop("disabled", false);
+ $form.data("validator").settings.ignore = '.ignore';
+ $editorContainer.find(':input').addClass('ignore');
}
}
}).data(editorDataKey);
@@ -82,8 +84,16 @@
var postText = newPostEditor.getMarkdown();
$postTextInput.val(postText);
+ if (!$form.valid()) {
+ var validationResult = $form.validate();
+ abp.message.warn(validationResult.errorList[0].message); //TODO: errors can be merged into lines. make sweetalert accept HTML.
+ e.preventDefault();
+ return false; //for old browsers
+ }
+
$submitButton.buttonBusy();
$(this).off('submit').submit();
});
-})(jQuery);
+});
+
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/new.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/new.js
index 519d3f41f4..0c3e927264 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/new.js
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/new.js
@@ -1,5 +1,4 @@
-var editor = null;
-(function ($) {
+$(function () {
var $container = $("#qa-new-post-container");
var $editorContainer = $container.find(".new-post-editor");
@@ -72,6 +71,8 @@
load: function () {
$editorContainer.find(".loading-cover").remove();
$submitButton.prop("disabled", false);
+ $form.data("validator").settings.ignore = '.ignore';
+ $editorContainer.find(':input').addClass('ignore');
}
}
}).data(editorDataKey);
@@ -82,6 +83,13 @@
var postText = newPostEditor.getMarkdown();
$postTextInput.val(postText);
+ if (!$form.valid()) {
+ var validationResult = $form.validate();
+ abp.message.warn(validationResult.errorList[0].message); //TODO: errors can be merged into lines. make sweetalert accept HTML.
+ e.preventDefault();
+ return false; //for old browsers
+ }
+
$submitButton.buttonBusy();
$(this).off('submit').submit();
});
@@ -113,4 +121,4 @@
}
});
-})(jQuery);
+});
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.css
index cb11960907..918d409539 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.css
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.css
@@ -43,7 +43,7 @@
display: inline-block;
border-radius: 50%; }
.hero-section .hero-articles .img-container {
- background: black; }
+ min-height: 320px; }
.hero-section .hero-articles .img-container img {
filter: grayscale(10%); }
.hero-section .hero-articles .img-container::after {
@@ -54,7 +54,7 @@
bottom: 0px;
width: 100%;
top: 1% !important;
- background: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, 0.91) 89%, rgba(0, 0, 0, 0.93) 93%) !important;
+ background: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, 0.75) 89%, rgba(0, 0, 0, 0.78) 93%) !important;
transition: .2s all ease-in-out;
opacity: .9; }
.hero-section .hero-articles:hover .img-container::after {
@@ -136,5 +136,5 @@
.img-container {
position: relative;
overflow: hidden;
- border-radius: 4px; }
-
+ border-radius: 4px;
+ background: gainsboro; }
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.min.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.min.css
index b01dc9344d..8a2ea9b03a 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.min.css
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.min.css
@@ -1 +1 @@
-.hero-section{padding:0;}.hero-section .hero-articles{position:relative;overflow:hidden;}.hero-section .hero-articles .hero-content{position:absolute;left:12%;right:12%;bottom:80px;z-index:4;text-align:center;}.hero-section .hero-articles .hero-content h2{margin-top:0;font-size:2.5em;font-weight:bold;}.hero-section .hero-articles .hero-content a{color:#fff;text-shadow:0 0 20px rgba(0,0,0,.5);}.hero-section .hero-articles .hero-content p{color:#fff;}.hero-section .hero-articles .tags .tag{background:rgba(208,208,208,.3);color:#fff !important;}.hero-section .hero-articles .tags .tag:hover{background:#fff;color:#000 !important;}.hero-section .hero-articles .article-owner{text-align:center;position:relative;z-index:12;}.hero-section .hero-articles .article-owner .article-infos{color:#000;}.hero-section .hero-articles .article-owner .article-infos a{color:#000;}.hero-section .hero-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(255,255,255,.2);}.hero-section .hero-articles .article-owner .article-infos img.article-avatar{width:64px;margin:-25px 10px 0 0;border:3px solid #fff;display:inline-block;border-radius:50%;}.hero-section .hero-articles .img-container{background:#000;}.hero-section .hero-articles .img-container img{filter:grayscale(10%);}.hero-section .hero-articles .img-container::after{content:"";display:block;position:absolute;z-index:1;bottom:0;width:100%;top:1% !important;background:linear-gradient(to bottom,transparent 0,rgba(0,0,0,.91) 89%,rgba(0,0,0,.93) 93%) !important;transition:.2s all ease-in-out;opacity:.9;}.hero-section .hero-articles:hover .img-container::after{opacity:1;}.article-owner .article-infos{color:#000;}.article-owner .article-infos a{color:rgba(0,0,0,.6);}.article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}.article-owner .article-infos img.article-avatar{width:30px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}.card-articles .card-content{padding:10px 0 10px;}.card-articles .card-content h3{margin:10px 0;}.card-articles .card-content h3 a{font-weight:700;}.card-articles .article-owner{text-align:left;}.card-articles .article-owner .article-infos{color:#000;}.card-articles .article-owner .article-infos a{color:rgba(0,0,0,.6);}.card-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}.card-articles .article-owner .article-infos img.article-avatar{width:30px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}.article-owner{font-size:.85em;}.user-link-icons{position:absolute;right:18px;top:15px;z-index:3;}.user-link-icons a{display:inline-block;color:#eee;margin-left:12px;font-size:1.25em;}.user-link-icons a:hover{color:#fff;}.tags .tag{display:inline-block;padding:2px 8px;background:rgba(208,208,208,.3);border-radius:30px;margin:0 1px 3px 0;color:#b1b1b1 !important;font-size:.7em;line-height:1.6em;text-transform:uppercase;}.tags .tag:hover{background:#000;color:#fff !important;}.popular-tags a{display:block;font-size:.9em;}.popular-tags a span{float:right;opacity:.3;font-size:.9em;}.img-container{position:relative;overflow:hidden;border-radius:4px;}
\ No newline at end of file
+.hero-section{padding:0;}.hero-section .hero-articles{position:relative;overflow:hidden;}.hero-section .hero-articles .hero-content{position:absolute;left:12%;right:12%;bottom:80px;z-index:4;text-align:center;}.hero-section .hero-articles .hero-content h2{margin-top:0;font-size:2.5em;font-weight:bold;}.hero-section .hero-articles .hero-content a{color:#fff;text-shadow:0 0 20px rgba(0,0,0,.5);}.hero-section .hero-articles .hero-content p{color:#fff;}.hero-section .hero-articles .tags .tag{background:rgba(208,208,208,.3);color:#fff !important;}.hero-section .hero-articles .tags .tag:hover{background:#fff;color:#000 !important;}.hero-section .hero-articles .article-owner{text-align:center;position:relative;z-index:12;}.hero-section .hero-articles .article-owner .article-infos{color:#000;}.hero-section .hero-articles .article-owner .article-infos a{color:#000;}.hero-section .hero-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(255,255,255,.2);}.hero-section .hero-articles .article-owner .article-infos img.article-avatar{width:64px;margin:-25px 10px 0 0;border:3px solid #fff;display:inline-block;border-radius:50%;}.hero-section .hero-articles .img-container{min-height:320px;}.hero-section .hero-articles .img-container img{filter:grayscale(10%);}.hero-section .hero-articles .img-container::after{content:"";display:block;position:absolute;z-index:1;bottom:0;width:100%;top:1% !important;background:linear-gradient(to bottom,transparent 0,rgba(0,0,0,.75) 89%,rgba(0,0,0,.78) 93%) !important;transition:.2s all ease-in-out;opacity:.9;}.hero-section .hero-articles:hover .img-container::after{opacity:1;}.article-owner .article-infos{color:#000;}.article-owner .article-infos a{color:rgba(0,0,0,.6);}.article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}.article-owner .article-infos img.article-avatar{width:30px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}.card-articles .card-content{padding:10px 0 10px;}.card-articles .card-content h3{margin:10px 0;}.card-articles .card-content h3 a{font-weight:700;}.card-articles .article-owner{text-align:left;}.card-articles .article-owner .article-infos{color:#000;}.card-articles .article-owner .article-infos a{color:rgba(0,0,0,.6);}.card-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}.card-articles .article-owner .article-infos img.article-avatar{width:30px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}.article-owner{font-size:.85em;}.user-link-icons{position:absolute;right:18px;top:15px;z-index:3;}.user-link-icons a{display:inline-block;color:#eee;margin-left:12px;font-size:1.25em;}.user-link-icons a:hover{color:#fff;}.tags .tag{display:inline-block;padding:2px 8px;background:rgba(208,208,208,.3);border-radius:30px;margin:0 1px 3px 0;color:#b1b1b1 !important;font-size:.7em;line-height:1.6em;text-transform:uppercase;}.tags .tag:hover{background:#000;color:#fff !important;}.popular-tags a{display:block;font-size:.9em;}.popular-tags a span{float:right;opacity:.3;font-size:.9em;}.img-container{position:relative;overflow:hidden;border-radius:4px;background:#dcdcdc;}
\ No newline at end of file
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.scss b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.scss
index 42f1adb3bb..70c2ee94f6 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.scss
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.scss
@@ -1,66 +1,80 @@
-.hero-section {
- padding: 0;
- .hero-articles {
- position: relative;
- overflow: hidden;
- .hero-content {
+.hero-section {
+ padding: 0;
+
+ .hero-articles {
+ position: relative;
+ overflow: hidden;
+
+ .hero-content {
position: absolute;
left: 12%;
right: 12%;
bottom: 80px;
- z-index: 4;
+ z-index: 4;
text-align: center;
+
h2 {
margin-top: 0;
font-size: 2.5em;
font-weight: bold;
}
- a {
+
+ a {
color: white;
text-shadow: 0px 0px 20px rgba(0, 0, 0, 0.5);
}
- p {
+
+ p {
color: white;
- }
+ }
}
- .tags {
- .tag {
- background: rgba(208, 208, 208, 0.3);
- color: #fff !important;
- &:hover {
- background: white;
+
+ .tags {
+ .tag {
+ background: rgba(208, 208, 208, 0.3);
+ color: #fff !important;
+
+ &:hover {
+ background: white;
color: black !important;
}
}
}
-
- .article-owner {
- text-align: center;
- position: relative;
+
+ .article-owner {
+ text-align: center;
+ position: relative;
z-index: 12;
+
.article-infos {
- color: black;
+ color: black;
+
a {
- color: black;
+ color: black;
}
+
.seperator {
margin: 0 4px;
color: rgba(255, 255, 255, 0.2);
}
- img.article-avatar {
+
+ img.article-avatar {
width: 64px;
- margin: -25px 10px 0px 0;
+ margin: -25px 10px 0px 0;
border: 3px solid #fff;
display: inline-block;
- border-radius: 50%;
+ border-radius: 50%;
}
}
- }
- .img-container {
- background: black;
+ }
+
+ .img-container {
+ min-height: 320px;
+
img {
- filter: grayscale(10%);
- }
+ filter: grayscale(10%);
+ }
+
&::after {
content: "";
display: block;
@@ -69,19 +83,20 @@
bottom: 0px;
width: 100%;
top: 1% !important;
- background: linear-gradient(to bottom,rgba(0, 0, 0, 0) 0,rgba(0, 0, 0, 0.91) 89%,rgba(0, 0, 0, 0.93) 93%) !important;
+ background: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, 0.75) 89%, rgba(0, 0, 0, 0.78) 93%) !important;
transition: .2s all ease-in-out;
opacity: .9;
}
- }
- &:hover {
+ }
+
+ &:hover {
.img-container {
- &::after {
+ &::after {
opacity: 1;
}
}
- }
- }
+ }
+ }
}
.article-owner {
@@ -189,8 +204,9 @@
.img-container {
- position: relative;
+ position: relative;
overflow: hidden;
- border-radius: 4px;
+ border-radius: 4px;
+ background: gainsboro;
}
\ No newline at end of file
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.css
index b832f53a9a..84e4ab27cc 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.css
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.css
@@ -132,7 +132,7 @@
display: inline-block;
border-radius: 50%; }
div.vs-blog .hero-section .hero-articles .img-container {
- background: black; }
+ min-height: 320px; }
div.vs-blog .hero-section .hero-articles .img-container img {
filter: grayscale(10%); }
div.vs-blog .hero-section .hero-articles .img-container::after {
@@ -143,7 +143,7 @@
bottom: 0px;
width: 100%;
top: 1% !important;
- background: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, 0.91) 89%, rgba(0, 0, 0, 0.93) 93%) !important;
+ background: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, 0.75) 89%, rgba(0, 0, 0, 0.78) 93%) !important;
transition: .2s all ease-in-out;
opacity: .9; }
div.vs-blog .hero-section .hero-articles:hover .img-container::after {
@@ -217,7 +217,8 @@
div.vs-blog .img-container {
position: relative;
overflow: hidden;
- border-radius: 4px; }
+ border-radius: 4px;
+ background: gainsboro; }
div.vs-blog .post-detail h1 {
padding: 0px 0;
line-height: 1.25em;
@@ -309,4 +310,3 @@
div.vs-blog .box-articles .img-container img.portrait {
width: 100%;
height: auto; } }
-
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.min.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.min.css
index 2440d385e7..57895315af 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.min.css
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.min.css
@@ -1 +1 @@
-div.vs-blog{position:relative;background:#fff;padding:0 30px;font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:14px;margin:0 auto;max-width:1080px;}div.vs-blog a,div.vs-blog a:hover{text-decoration:none;color:#000;}div.vs-blog p{color:#444;}div.vs-blog p a{text-decoration:underline;}div.vs-blog h1,div.vs-blog h2,div.vs-blog h3,div.vs-blog h4,div.vs-blog h5,div.vs-blog h6,div.vs-blog .tab-title{font-family:Helvetica,Arial,sans-serif;font-weight:700;}div.vs-blog h1{font-size:2.25em;margin:1.5rem 0 .75rem;}div.vs-blog h2,div.vs-blog .tab-title{font-size:1.75em;margin:1.5rem 0 .75rem;}div.vs-blog h3{font-size:1.5em;margin:1.5rem 0 .75rem;}div.vs-blog h4{font-size:1.25em;margin:1.5rem 0 .75rem;}div.vs-blog h5{font-size:1em;}div.vs-blog h6{font-size:1em;}div.vs-blog .lead{font-size:1.1rem;font-weight:300;}div.vs-blog img{max-width:100%;}div.vs-blog input,div.vs-blog select,div.vs-blog textarea,div.vs-blog .form-control,div.vs-blog .btn{border-radius:0;}div.vs-blog .navbar-toggler{background:#0ff;}div.vs-blog .no-border{border:0;}div.vs-blog .btn-rounded{border-radius:30px;}div.vs-blog .list-group .list-group-item{position:relative;display:block;padding:0 0 20px 0;background:none;border-radius:0;border:0;}div.vs-blog .list-group .list-group-item:hover{background:none;}div.vs-blog .list-group .list-group-item+.list-group-item{border-top:1px solid #f5f5f5;padding:20px 0;}div.vs-blog .list-group .list-group-item h3{margin-top:0;}div.vs-blog .list-group.small-list .list-group-item{padding:10px 0;}div.vs-blog .list-group.small-list .list-group-item+.list-group-item{padding:10px 0;}div.vs-blog .font-75{font-size:.75em;}div.vs-blog .font-85{font-size:.85em;}div.vs-blog .font-92{font-size:.92em;}div.vs-blog .font-100{font-size:1em;}div.vs-blog .font-125{font-size:1.25em;}div.vs-blog .vs-blog-title{padding-bottom:15px;margin-bottom:25px;border-bottom:1px solid #ddd;}div.vs-blog .vs-blog-title h1,div.vs-blog .vs-blog-title h2,div.vs-blog .vs-blog-title h3,div.vs-blog .vs-blog-title h4,div.vs-blog .vs-blog-title h5,div.vs-blog .vs-blog-title h6{margin:0;padding:0;}div.vs-blog .vs-footer{padding-top:15px;margin-top:25px;border-top:1px solid #ddd;}div.vs-blog .vs-seperator{padding:0 4px;opacity:.3;}div.vs-blog .hero-section{padding:0;}div.vs-blog .hero-section .hero-articles{position:relative;overflow:hidden;}div.vs-blog .hero-section .hero-articles .hero-content{position:absolute;left:12%;right:12%;bottom:80px;z-index:4;text-align:center;}div.vs-blog .hero-section .hero-articles .hero-content h2{margin-top:0;font-size:2.5em;font-weight:bold;}div.vs-blog .hero-section .hero-articles .hero-content a{color:#fff;text-shadow:0 0 20px rgba(0,0,0,.5);}div.vs-blog .hero-section .hero-articles .hero-content p{color:#fff;}div.vs-blog .hero-section .hero-articles .tags .tag{background:rgba(208,208,208,.3);color:#fff !important;}div.vs-blog .hero-section .hero-articles .tags .tag:hover{background:#fff;color:#000 !important;}div.vs-blog .hero-section .hero-articles .article-owner{text-align:center;position:relative;z-index:12;}div.vs-blog .hero-section .hero-articles .article-owner .article-infos{color:#000;}div.vs-blog .hero-section .hero-articles .article-owner .article-infos a{color:#000;}div.vs-blog .hero-section .hero-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(255,255,255,.2);}div.vs-blog .hero-section .hero-articles .article-owner .article-infos img.article-avatar{width:64px;margin:-25px 10px 0 0;border:3px solid #fff;display:inline-block;border-radius:50%;}div.vs-blog .hero-section .hero-articles .img-container{background:#000;}div.vs-blog .hero-section .hero-articles .img-container img{filter:grayscale(10%);}div.vs-blog .hero-section .hero-articles .img-container::after{content:"";display:block;position:absolute;z-index:1;bottom:0;width:100%;top:1% !important;background:linear-gradient(to bottom,transparent 0,rgba(0,0,0,.91) 89%,rgba(0,0,0,.93) 93%) !important;transition:.2s all ease-in-out;opacity:.9;}div.vs-blog .hero-section .hero-articles:hover .img-container::after{opacity:1;}div.vs-blog .article-owner .article-infos{color:#000;}div.vs-blog .article-owner .article-infos a{color:rgba(0,0,0,.6);}div.vs-blog .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}div.vs-blog .article-owner .article-infos img.article-avatar{width:30px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}div.vs-blog .card-articles .card-content{padding:10px 0 10px;}div.vs-blog .card-articles .card-content h3{margin:10px 0;}div.vs-blog .card-articles .card-content h3 a{font-weight:700;}div.vs-blog .card-articles .article-owner{text-align:left;}div.vs-blog .card-articles .article-owner .article-infos{color:#000;}div.vs-blog .card-articles .article-owner .article-infos a{color:rgba(0,0,0,.6);}div.vs-blog .card-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}div.vs-blog .card-articles .article-owner .article-infos img.article-avatar{width:30px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}div.vs-blog .article-owner{font-size:.85em;}div.vs-blog .user-link-icons{position:absolute;right:18px;top:15px;z-index:3;}div.vs-blog .user-link-icons a{display:inline-block;color:#eee;margin-left:12px;font-size:1.25em;}div.vs-blog .user-link-icons a:hover{color:#fff;}div.vs-blog .tags .tag{display:inline-block;padding:2px 8px;background:rgba(208,208,208,.3);border-radius:30px;margin:0 1px 3px 0;color:#b1b1b1 !important;font-size:.7em;line-height:1.6em;text-transform:uppercase;}div.vs-blog .tags .tag:hover{background:#000;color:#fff !important;}div.vs-blog .popular-tags a{display:block;font-size:.9em;}div.vs-blog .popular-tags a span{float:right;opacity:.3;font-size:.9em;}div.vs-blog .img-container{position:relative;overflow:hidden;border-radius:4px;}div.vs-blog .post-detail h1{padding:0 0;line-height:1.25em;font-size:3.5em;}div.vs-blog .post-detail .article-owner{text-align:center;position:relative;z-index:12;}div.vs-blog .post-detail .article-owner .article-infos{color:#000;}div.vs-blog .post-detail .article-owner .article-infos a{color:#000;color:rgba(0,0,0,.8);}div.vs-blog .post-detail .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}div.vs-blog .post-detail .article-owner .article-infos img.article-avatar{width:64px;margin:-20px 10px 0 0;display:inline-block;border-radius:50%;border:3px solid #fff;}div.vs-blog .post-detail .post-content{font-size:1.125em;}div.vs-blog .post-detail .post-content .post-img-container{margin:50px -80px 20px;overflow:hidden;border-radius:4px;}div.vs-blog .post-detail .post-content .lead{font-size:1.125em;color:#111;}div.vs-blog .comment-avatar{max-width:64px;}div.vs-blog .answer-avatar{max-width:48px;}div.vs-blog .media{font-size:.95em;}div.vs-blog .media .media{font-size:.95em;}div.vs-blog .comment-area .comment-owner{margin-bottom:2px;}div.vs-blog .comment-area .comment-owner span{font-weight:300;color:#999;font-size:.8em;}div.vs-blog .comment-area>.media{padding:30px 0;border-bottom:1px solid #f1f1f1;}div.vs-blog .comment-area>.media .media{padding:20px 0;}div.vs-blog .comment-area .comment-buttons{padding:4px 8px;}div.vs-blog .comment-area .comment-buttons .seperator{color:#ddd;margin:0 8px;}div.vs-blog .comment-area .comment-buttons .count{color:#fff;background:#ddd;margin-left:5px;padding:1px 3px;font-size:10px;border-radius:3px;}div.vs-blog .comment-area .comment-buttons .count.count-up{background:#999;}div.vs-blog .comment-area .comment-buttons a{opacity:.5;}div.vs-blog .comment-area .comment-buttons a:hover{opacity:.75;}div.vs-blog .comment-area p{margin-bottom:6px;}div.vs-blog .comment-area .comment-avatar{width:64px;}div.vs-blog .comment-area .answer-avatar{width:48px;}@media(min-width:767px){div.vs-blog .box-articles .img-container{position:relative;overflow:hidden;}div.vs-blog .box-articles .img-container img{position:absolute;left:50%;top:50%;height:100%;width:auto;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);max-width:initial;}div.vs-blog .box-articles .img-container img.portrait{width:100%;height:auto;}}
\ No newline at end of file
+div.vs-blog{position:relative;background:#fff;padding:0 30px;font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:14px;margin:0 auto;max-width:1080px;}div.vs-blog a,div.vs-blog a:hover{text-decoration:none;color:#000;}div.vs-blog p{color:#444;}div.vs-blog p a{text-decoration:underline;}div.vs-blog h1,div.vs-blog h2,div.vs-blog h3,div.vs-blog h4,div.vs-blog h5,div.vs-blog h6,div.vs-blog .tab-title{font-family:Helvetica,Arial,sans-serif;font-weight:700;}div.vs-blog h1{font-size:2.25em;margin:1.5rem 0 .75rem;}div.vs-blog h2,div.vs-blog .tab-title{font-size:1.75em;margin:1.5rem 0 .75rem;}div.vs-blog h3{font-size:1.5em;margin:1.5rem 0 .75rem;}div.vs-blog h4{font-size:1.25em;margin:1.5rem 0 .75rem;}div.vs-blog h5{font-size:1em;}div.vs-blog h6{font-size:1em;}div.vs-blog .lead{font-size:1.1rem;font-weight:300;}div.vs-blog img{max-width:100%;}div.vs-blog input,div.vs-blog select,div.vs-blog textarea,div.vs-blog .form-control,div.vs-blog .btn{border-radius:0;}div.vs-blog .navbar-toggler{background:#0ff;}div.vs-blog .no-border{border:0;}div.vs-blog .btn-rounded{border-radius:30px;}div.vs-blog .list-group .list-group-item{position:relative;display:block;padding:0 0 20px 0;background:none;border-radius:0;border:0;}div.vs-blog .list-group .list-group-item:hover{background:none;}div.vs-blog .list-group .list-group-item+.list-group-item{border-top:1px solid #f5f5f5;padding:20px 0;}div.vs-blog .list-group .list-group-item h3{margin-top:0;}div.vs-blog .list-group.small-list .list-group-item{padding:10px 0;}div.vs-blog .list-group.small-list .list-group-item+.list-group-item{padding:10px 0;}div.vs-blog .font-75{font-size:.75em;}div.vs-blog .font-85{font-size:.85em;}div.vs-blog .font-92{font-size:.92em;}div.vs-blog .font-100{font-size:1em;}div.vs-blog .font-125{font-size:1.25em;}div.vs-blog .vs-blog-title{padding-bottom:15px;margin-bottom:25px;border-bottom:1px solid #ddd;}div.vs-blog .vs-blog-title h1,div.vs-blog .vs-blog-title h2,div.vs-blog .vs-blog-title h3,div.vs-blog .vs-blog-title h4,div.vs-blog .vs-blog-title h5,div.vs-blog .vs-blog-title h6{margin:0;padding:0;}div.vs-blog .vs-footer{padding-top:15px;margin-top:25px;border-top:1px solid #ddd;}div.vs-blog .vs-seperator{padding:0 4px;opacity:.3;}div.vs-blog .hero-section{padding:0;}div.vs-blog .hero-section .hero-articles{position:relative;overflow:hidden;}div.vs-blog .hero-section .hero-articles .hero-content{position:absolute;left:12%;right:12%;bottom:80px;z-index:4;text-align:center;}div.vs-blog .hero-section .hero-articles .hero-content h2{margin-top:0;font-size:2.5em;font-weight:bold;}div.vs-blog .hero-section .hero-articles .hero-content a{color:#fff;text-shadow:0 0 20px rgba(0,0,0,.5);}div.vs-blog .hero-section .hero-articles .hero-content p{color:#fff;}div.vs-blog .hero-section .hero-articles .tags .tag{background:rgba(208,208,208,.3);color:#fff !important;}div.vs-blog .hero-section .hero-articles .tags .tag:hover{background:#fff;color:#000 !important;}div.vs-blog .hero-section .hero-articles .article-owner{text-align:center;position:relative;z-index:12;}div.vs-blog .hero-section .hero-articles .article-owner .article-infos{color:#000;}div.vs-blog .hero-section .hero-articles .article-owner .article-infos a{color:#000;}div.vs-blog .hero-section .hero-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(255,255,255,.2);}div.vs-blog .hero-section .hero-articles .article-owner .article-infos img.article-avatar{width:64px;margin:-25px 10px 0 0;border:3px solid #fff;display:inline-block;border-radius:50%;}div.vs-blog .hero-section .hero-articles .img-container{min-height:320px;}div.vs-blog .hero-section .hero-articles .img-container img{filter:grayscale(10%);}div.vs-blog .hero-section .hero-articles .img-container::after{content:"";display:block;position:absolute;z-index:1;bottom:0;width:100%;top:1% !important;background:linear-gradient(to bottom,transparent 0,rgba(0,0,0,.75) 89%,rgba(0,0,0,.78) 93%) !important;transition:.2s all ease-in-out;opacity:.9;}div.vs-blog .hero-section .hero-articles:hover .img-container::after{opacity:1;}div.vs-blog .article-owner .article-infos{color:#000;}div.vs-blog .article-owner .article-infos a{color:rgba(0,0,0,.6);}div.vs-blog .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}div.vs-blog .article-owner .article-infos img.article-avatar{width:30px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}div.vs-blog .card-articles .card-content{padding:10px 0 10px;}div.vs-blog .card-articles .card-content h3{margin:10px 0;}div.vs-blog .card-articles .card-content h3 a{font-weight:700;}div.vs-blog .card-articles .article-owner{text-align:left;}div.vs-blog .card-articles .article-owner .article-infos{color:#000;}div.vs-blog .card-articles .article-owner .article-infos a{color:rgba(0,0,0,.6);}div.vs-blog .card-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}div.vs-blog .card-articles .article-owner .article-infos img.article-avatar{width:30px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}div.vs-blog .article-owner{font-size:.85em;}div.vs-blog .user-link-icons{position:absolute;right:18px;top:15px;z-index:3;}div.vs-blog .user-link-icons a{display:inline-block;color:#eee;margin-left:12px;font-size:1.25em;}div.vs-blog .user-link-icons a:hover{color:#fff;}div.vs-blog .tags .tag{display:inline-block;padding:2px 8px;background:rgba(208,208,208,.3);border-radius:30px;margin:0 1px 3px 0;color:#b1b1b1 !important;font-size:.7em;line-height:1.6em;text-transform:uppercase;}div.vs-blog .tags .tag:hover{background:#000;color:#fff !important;}div.vs-blog .popular-tags a{display:block;font-size:.9em;}div.vs-blog .popular-tags a span{float:right;opacity:.3;font-size:.9em;}div.vs-blog .img-container{position:relative;overflow:hidden;border-radius:4px;background:#dcdcdc;}div.vs-blog .post-detail h1{padding:0 0;line-height:1.25em;font-size:3.5em;}div.vs-blog .post-detail .article-owner{text-align:center;position:relative;z-index:12;}div.vs-blog .post-detail .article-owner .article-infos{color:#000;}div.vs-blog .post-detail .article-owner .article-infos a{color:#000;color:rgba(0,0,0,.8);}div.vs-blog .post-detail .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}div.vs-blog .post-detail .article-owner .article-infos img.article-avatar{width:64px;margin:-20px 10px 0 0;display:inline-block;border-radius:50%;border:3px solid #fff;}div.vs-blog .post-detail .post-content{font-size:1.125em;}div.vs-blog .post-detail .post-content .post-img-container{margin:50px -80px 20px;overflow:hidden;border-radius:4px;}div.vs-blog .post-detail .post-content .lead{font-size:1.125em;color:#111;}div.vs-blog .comment-avatar{max-width:64px;}div.vs-blog .answer-avatar{max-width:48px;}div.vs-blog .media{font-size:.95em;}div.vs-blog .media .media{font-size:.95em;}div.vs-blog .comment-area .comment-owner{margin-bottom:2px;}div.vs-blog .comment-area .comment-owner span{font-weight:300;color:#999;font-size:.8em;}div.vs-blog .comment-area>.media{padding:30px 0;border-bottom:1px solid #f1f1f1;}div.vs-blog .comment-area>.media .media{padding:20px 0;}div.vs-blog .comment-area .comment-buttons{padding:4px 8px;}div.vs-blog .comment-area .comment-buttons .seperator{color:#ddd;margin:0 8px;}div.vs-blog .comment-area .comment-buttons .count{color:#fff;background:#ddd;margin-left:5px;padding:1px 3px;font-size:10px;border-radius:3px;}div.vs-blog .comment-area .comment-buttons .count.count-up{background:#999;}div.vs-blog .comment-area .comment-buttons a{opacity:.5;}div.vs-blog .comment-area .comment-buttons a:hover{opacity:.75;}div.vs-blog .comment-area p{margin-bottom:6px;}div.vs-blog .comment-area .comment-avatar{width:64px;}div.vs-blog .comment-area .answer-avatar{width:48px;}@media(min-width:767px){div.vs-blog .box-articles .img-container{position:relative;overflow:hidden;}div.vs-blog .box-articles .img-container img{position:absolute;left:50%;top:50%;height:100%;width:auto;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);max-width:initial;}div.vs-blog .box-articles .img-container img.portrait{width:100%;height:auto;}}
\ No newline at end of file
diff --git a/modules/blogging/src/Volo.Blogging.Web/compilerconfig.json b/modules/blogging/src/Volo.Blogging.Web/compilerconfig.json
index bda7a0c0bd..d458e90385 100644
--- a/modules/blogging/src/Volo.Blogging.Web/compilerconfig.json
+++ b/modules/blogging/src/Volo.Blogging.Web/compilerconfig.json
@@ -6,5 +6,9 @@
{
"outputFile": "Pages/Blog/Shared/Styles/_home.css",
"inputFile": "Pages/Blog/Shared/Styles/_home.scss"
+ },
+ {
+ "outputFile": "Pages/Blog/Posts/Index.css",
+ "inputFile": "Pages/Blog/Posts/Index.scss"
}
]
\ No newline at end of file
diff --git a/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj b/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj
index aa2837f443..a36f95ac50 100644
--- a/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj
+++ b/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj
@@ -13,7 +13,7 @@
-
+
diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj
new file mode 100644
index 0000000000..b2911bddee
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj
@@ -0,0 +1,18 @@
+
+
+
+ netcoreapp2.2
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/BloggingDomainTestBase.cs b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/BloggingDomainTestBase.cs
new file mode 100644
index 0000000000..7d758ee699
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/BloggingDomainTestBase.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Volo.Blogging
+{
+ public abstract class BloggingDomainTestBase : BloggingTestBase
+ {
+
+ }
+}
diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/BloggingDomainTestModule.cs b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/BloggingDomainTestModule.cs
new file mode 100644
index 0000000000..01ab4b07c7
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/BloggingDomainTestModule.cs
@@ -0,0 +1,12 @@
+using Volo.Abp.Modularity;
+
+namespace Volo.Blogging
+{
+ [DependsOn(
+ typeof(BloggingEntityFrameworkCoreTestModule),
+ typeof(BloggingTestBaseModule)
+ )]
+ public class BloggingDomainTestModule : AbpModule
+ {
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Blogs/Blog_Tests.cs b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Blogs/Blog_Tests.cs
new file mode 100644
index 0000000000..6c44885dde
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Blogs/Blog_Tests.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Shouldly;
+using Volo.Blogging.Blogs;
+using Xunit;
+
+namespace Volo.Blogging
+{
+ public class Blog_Tests
+ {
+ [Theory]
+ [InlineData("aaa")]
+ [InlineData("bbb")]
+ public void SetName(string name)
+ {
+ var blog = new Blog(Guid.NewGuid(), "test blog", "test");
+ blog.SetName(name);
+ blog.Name.ShouldBe(name);
+ }
+
+ [Theory]
+ [InlineData("aaa")]
+ [InlineData("bbb")]
+ public void SetShortName(string name)
+ {
+ var blog = new Blog(Guid.NewGuid(), "test blog", "test");
+ blog.SetShortName(name);
+ blog.ShortName.ShouldBe(name);
+ }
+ }
+}
diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Comments/Comment_Tests.cs b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Comments/Comment_Tests.cs
new file mode 100644
index 0000000000..34195d5f81
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Comments/Comment_Tests.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Shouldly;
+using Volo.Blogging.Comments;
+using Xunit;
+
+namespace Volo.Blogging
+{
+ public class Comment_Tests
+ {
+ [Theory]
+ [InlineData("aaa")]
+ [InlineData("bbb")]
+ public void SetText(string text)
+ {
+ var comment = new Comment(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), "good");
+ comment.SetText(text);
+ comment.Text.ShouldBe(text);
+ }
+ }
+}
diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Posts/Post_Tests.cs b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Posts/Post_Tests.cs
new file mode 100644
index 0000000000..2fb96d6b2c
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Posts/Post_Tests.cs
@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Shouldly;
+using Volo.Blogging.Comments;
+using Volo.Blogging.Posts;
+using Xunit;
+
+namespace Volo.Blogging
+{
+ public class Post_Tests
+ {
+ [Fact]
+ public void IncreaseReadCount()
+ {
+ var post = new Post(Guid.NewGuid(), Guid.NewGuid(), "abp", "⊙o⊙", "abp.io");
+ post.IncreaseReadCount();
+ post.ReadCount.ShouldBe(1);
+ }
+
+ [Theory]
+ [InlineData("aaa")]
+ [InlineData("bbb")]
+ public void SetTitle(string title)
+ {
+ var post = new Post(Guid.NewGuid(), Guid.NewGuid(), "abp", "⊙o⊙", "abp.io");
+ post.SetTitle(title);
+ post.Title.ShouldBe(title);
+ }
+
+ [Theory]
+ [InlineData("aaa")]
+ [InlineData("bbb")]
+ public void SetUrl(string url)
+ {
+ var post = new Post(Guid.NewGuid(), Guid.NewGuid(), "abp", "⊙o⊙", "abp.io");
+ post.SetUrl(url);
+ post.Url.ShouldBe(url);
+ }
+
+ [Fact]
+ public void AddTag()
+ {
+ var post = new Post(Guid.NewGuid(), Guid.NewGuid(), "abp", "⊙o⊙", "abp.io");
+ var tagId = Guid.NewGuid();
+ post.AddTag(tagId);
+ post.Tags.ShouldContain(x => x.TagId == tagId);
+ }
+
+
+ [Fact]
+ public void RemoveTag()
+ {
+ var post = new Post(Guid.NewGuid(), Guid.NewGuid(), "abp", "⊙o⊙", "abp.io");
+ var tagId = Guid.NewGuid();
+ post.AddTag(tagId);
+
+ post.Tags.ShouldContain(x => x.TagId == tagId);
+
+ post.RemoveTag(tagId);
+ post.Tags.ShouldNotContain(x => x.TagId == tagId);
+ }
+
+ }
+}
diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Tagging/Tag_Tests.cs b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Tagging/Tag_Tests.cs
new file mode 100644
index 0000000000..a4368a6341
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Tagging/Tag_Tests.cs
@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Shouldly;
+using Volo.Blogging.Tagging;
+using Xunit;
+
+namespace Volo.Blogging
+{
+ public class Tag_Tests
+ {
+ [Theory]
+ [InlineData("aaa")]
+ [InlineData("bbb")]
+ public void SetName(string name)
+ {
+ var tag = new Tag(Guid.NewGuid(), "abp", 0, "abp tag");
+ tag.SetName(name);
+ tag.Name.ShouldBe(name);
+ }
+
+ [Theory]
+ [InlineData(1)]
+ [InlineData(2)]
+ [InlineData(3)]
+ public void IncreaseUsageCount(int number)
+ {
+ var tag = new Tag(Guid.NewGuid(), "abp", 0, "abp tag");
+ tag.IncreaseUsageCount(number);
+ tag.UsageCount.ShouldBe(number);
+ }
+
+ [Theory]
+ [InlineData(1)]
+ [InlineData(2)]
+ [InlineData(3)]
+ public void DecreaseUsageCount(int number)
+ {
+ var tag = new Tag(Guid.NewGuid(), "abp", 10, "abp tag");
+ tag.DecreaseUsageCount(number);
+ tag.UsageCount.ShouldBe(10 - number);
+ }
+
+ [Fact]
+ public void DecreaseUsageCount_Should_Greater_ThanOrEqual_Zero()
+ {
+ var tag = new Tag(Guid.NewGuid(), "abp", 10, "abp tag");
+ tag.DecreaseUsageCount(100);
+ tag.UsageCount.ShouldBe(0);
+ }
+
+ [Theory]
+ [InlineData("aaa")]
+ [InlineData("bbb")]
+ public void SetDescription(string description)
+ {
+ var tag = new Tag(Guid.NewGuid(), "abp", 0, "abp tag");
+ tag.SetDescription(description);
+ tag.Description.ShouldBe(description);
+ }
+
+
+ }
+}
diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Users/BlogUser_Test.cs b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Users/BlogUser_Test.cs
new file mode 100644
index 0000000000..e407d6f3f0
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Users/BlogUser_Test.cs
@@ -0,0 +1,71 @@
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using System.Text;
+using Shouldly;
+using Volo.Abp.Users;
+using Volo.Blogging.Users;
+using Xunit;
+
+namespace Volo.Blogging
+{
+ public class BlogUser_Test
+ {
+ [Fact]
+ public void Update()
+ {
+ var userId = Guid.NewGuid();
+ var tenantId = Guid.NewGuid();
+ var blogUser = new BlogUser(new UserData(userId, "bob lee", "boblee@volosoft.com", "lee", "bob", true,
+ "123456", true, tenantId));
+ var userData = new UserData(userId, "lee bob", "leebob@volosoft.com", "bob", "lee", false,
+ "654321", false, tenantId);
+
+ blogUser.Update(userData);
+
+ blogUser.Equals(new BlogUser(userData)).ShouldBeTrue();
+ }
+
+ [Fact]
+ public void Update_User_Id_Must_Equals()
+ {
+ var userId = Guid.NewGuid();
+ var tenantId = Guid.NewGuid();
+ var blogUser = new BlogUser(new UserData(userId, "bob lee", "boblee@volosoft.com", "lee", "bob", true,
+ "123456", true, tenantId));
+
+ var userData = new UserData(Guid.NewGuid(), "lee bob", "leebob@volosoft.com", "bob", "lee", false,
+ "654321", false, tenantId);
+
+ Assert.Throws(() => blogUser.Update(userData));
+ }
+
+ [Fact]
+ public void Update_Tenant_Id_Must_Equals()
+ {
+ var userId = Guid.NewGuid();
+ var tenantId = Guid.NewGuid();
+ var blogUser = new BlogUser(new UserData(userId, "bob lee", "boblee@volosoft.com", "lee", "bob", true,
+ "123456", true, tenantId));
+
+ var userData = new UserData(userId, "lee bob", "leebob@volosoft.com", "bob", "lee", false,
+ "654321", false, Guid.NewGuid());
+
+ Assert.Throws(() => blogUser.Update(userData));
+ }
+
+ [Fact]
+ public void BlogUserEquals()
+ {
+ var userId = Guid.NewGuid();
+ var tenantId = Guid.NewGuid();
+ var blogUser = new BlogUser(new UserData(userId, "bob lee", "john@volosoft.com", "lee", "bob", true,
+ "123456", true, tenantId));
+
+ var blogUser2= new BlogUser(new UserData(userId, "bob lee", "john@volosoft.com", "lee", "bob", true,
+ "123456", true, tenantId));
+
+ blogUser.Equals(blogUser2).ShouldBeTrue();
+ }
+ }
+}
diff --git a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj
index feb5448b1e..8f9b464a46 100644
--- a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj
+++ b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj
@@ -10,7 +10,7 @@
-
+
diff --git a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/Blogs/BlogRepository_Tests.cs b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/Blogs/BlogRepository_Tests.cs
index b86945418c..4735926cc2 100644
--- a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/Blogs/BlogRepository_Tests.cs
+++ b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/Blogs/BlogRepository_Tests.cs
@@ -1,9 +1,8 @@
-using Volo.Blogging.EntityFrameworkCore;
+using Volo.Blogging.Blogs;
-namespace Volo.Blogging.Blogs
+namespace Volo.Blogging
{
public class BlogRepository_Tests : BlogRepository_Tests
{
-
}
-}
+}
\ No newline at end of file
diff --git a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/Comments/CommentRepository_Tests.cs b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/Comments/CommentRepository_Tests.cs
new file mode 100644
index 0000000000..5013e633fb
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/Comments/CommentRepository_Tests.cs
@@ -0,0 +1,8 @@
+using Volo.Blogging.Comments;
+
+namespace Volo.Blogging
+{
+ public class CommentRepository_Tests : CommentRepository_Tests
+ {
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/EntityFrameworkCore/BloggingEntityFrameworkCoreTestModule.cs b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/EntityFrameworkCore/BloggingEntityFrameworkCoreTestModule.cs
index 67c5f7ce8b..59f0be4a24 100644
--- a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/EntityFrameworkCore/BloggingEntityFrameworkCoreTestModule.cs
+++ b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/EntityFrameworkCore/BloggingEntityFrameworkCoreTestModule.cs
@@ -2,12 +2,12 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage;
-using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Modularity;
+using Volo.Blogging.EntityFrameworkCore;
-namespace Volo.Blogging.EntityFrameworkCore
+namespace Volo.Blogging
{
[DependsOn(
typeof(BloggingEntityFrameworkCoreModule),
@@ -49,4 +49,4 @@ namespace Volo.Blogging.EntityFrameworkCore
_sqliteConnection.Dispose();
}
}
-}
+}
\ No newline at end of file
diff --git a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/Posts/PostRepository_Tests.cs b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/Posts/PostRepository_Tests.cs
new file mode 100644
index 0000000000..e23247de86
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/Posts/PostRepository_Tests.cs
@@ -0,0 +1,8 @@
+using Volo.Blogging.Posts;
+
+namespace Volo.Blogging
+{
+ public class PostRepository_Tests : PostRepository_Tests
+ {
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/Tagging/TagRepository_Tests.cs b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/Tagging/TagRepository_Tests.cs
new file mode 100644
index 0000000000..5de23c7665
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/Tagging/TagRepository_Tests.cs
@@ -0,0 +1,8 @@
+using Volo.Blogging.Tagging;
+
+namespace Volo.Blogging
+{
+ public class TagRepository_Tests : TagRepository_Tests
+ {
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj
new file mode 100644
index 0000000000..093113db66
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj
@@ -0,0 +1,19 @@
+
+
+
+ netcoreapp2.2
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/Blogs/BlogRepository_Tests.cs b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/Blogs/BlogRepository_Tests.cs
new file mode 100644
index 0000000000..333746f0f0
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/Blogs/BlogRepository_Tests.cs
@@ -0,0 +1,8 @@
+using Volo.Blogging.Blogs;
+
+namespace Volo.Blogging
+{
+ public class BlogRepository_Tests : BlogRepository_Tests
+ {
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/Comments/CommentRepository_Tests.cs b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/Comments/CommentRepository_Tests.cs
new file mode 100644
index 0000000000..353d22d3ee
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/Comments/CommentRepository_Tests.cs
@@ -0,0 +1,8 @@
+using Volo.Blogging.Comments;
+
+namespace Volo.Blogging
+{
+ public class CommentRepository_Tests : CommentRepository_Tests
+ {
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/MongoDB/BloggingMongoDBTestModule.cs b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/MongoDB/BloggingMongoDBTestModule.cs
new file mode 100644
index 0000000000..dc2c1cd47d
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/MongoDB/BloggingMongoDBTestModule.cs
@@ -0,0 +1,32 @@
+using Mongo2Go;
+using Volo.Abp;
+using Volo.Abp.Data;
+using Volo.Abp.Modularity;
+using Volo.Blogging.MongoDB;
+
+namespace Volo.Blogging
+{
+ [DependsOn(
+ typeof(BloggingTestBaseModule),
+ typeof(BloggingMongoDbModule)
+ )]
+ public class BloggingMongoDBTestModule : AbpModule
+ {
+ private MongoDbRunner _mongoDbRunner;
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ _mongoDbRunner = MongoDbRunner.Start();
+
+ Configure(options =>
+ {
+ options.ConnectionStrings.Default = _mongoDbRunner.ConnectionString;
+ });
+ }
+
+ public override void OnApplicationShutdown(ApplicationShutdownContext context)
+ {
+ _mongoDbRunner.Dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/Posts/PostRepository_Tests.cs b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/Posts/PostRepository_Tests.cs
new file mode 100644
index 0000000000..6fbaed0768
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/Posts/PostRepository_Tests.cs
@@ -0,0 +1,8 @@
+using Volo.Blogging.Posts;
+
+namespace Volo.Blogging
+{
+ public class PostRepository_Tests : PostRepository_Tests
+ {
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/Tagging/TagRepository_Tests.cs b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/Tagging/TagRepository_Tests.cs
new file mode 100644
index 0000000000..c727ef00b3
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo/Blogging/Tagging/TagRepository_Tests.cs
@@ -0,0 +1,8 @@
+using Volo.Blogging.Tagging;
+
+namespace Volo.Blogging
+{
+ public class TagRepository_Tests : TagRepository_Tests
+ {
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/BloggingTestData.cs b/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/BloggingTestData.cs
index 72910fb6ca..9666201719 100644
--- a/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/BloggingTestData.cs
+++ b/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/BloggingTestData.cs
@@ -9,6 +9,8 @@ namespace Volo.Blogging
public Guid Blog1Post1Id { get; } = Guid.NewGuid();
public Guid Blog1Post2Id { get; } = Guid.NewGuid();
public Guid Blog1Post1Comment1Id { get; } = Guid.NewGuid();
+ public Guid Blog1Post1Comment2Id { get; } = Guid.NewGuid();
public string Tag1Name { get; } = "Tag1Name";
+ public string Tag2Name { get; } = "Tag2Name";
}
}
\ No newline at end of file
diff --git a/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/BloggingTestDataBuilder.cs b/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/BloggingTestDataBuilder.cs
index 9e216ca4c4..67d8049a06 100644
--- a/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/BloggingTestDataBuilder.cs
+++ b/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/BloggingTestDataBuilder.cs
@@ -40,9 +40,12 @@ namespace Volo.Blogging
{
await _blogRepository.InsertAsync(new Blog(_testData.Blog1Id, "The First Blog", "blog-1"));
await _postRepository.InsertAsync(new Post(_testData.Blog1Post1Id, _testData.Blog1Id, "title", "coverImage", "url"));
- await _postRepository.InsertAsync(new Post(_testData.Blog1Post2Id, _testData.Blog1Id, "title", "coverImage", "url"));
+ await _postRepository.InsertAsync(new Post(_testData.Blog1Post2Id, _testData.Blog1Id, "title2", "coverImage2", "url2"));
await _commentRepository.InsertAsync(new Comment(_testData.Blog1Post1Comment1Id,_testData.Blog1Post1Id,null,"text"));
- await _tagRepository.InsertAsync(new Tag(_testData.Blog1Id, _testData.Tag1Name));
+ await _commentRepository.InsertAsync(new Comment(_testData.Blog1Post1Comment2Id, _testData.Blog1Post1Id, _testData.Blog1Post1Comment1Id, "text"));
+ await _tagRepository.InsertAsync(new Tag(_testData.Blog1Id, _testData.Tag1Name, 10));
+ await _tagRepository.InsertAsync(new Tag(_testData.Blog1Id, _testData.Tag2Name));
+
}
}
}
diff --git a/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/Comments/CommentRepository_Tests.cs b/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/Comments/CommentRepository_Tests.cs
new file mode 100644
index 0000000000..04db9d9f0b
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/Comments/CommentRepository_Tests.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using Shouldly;
+using Volo.Abp.Modularity;
+using Xunit;
+
+namespace Volo.Blogging.Comments
+{
+ public abstract class CommentRepository_Tests : BloggingTestBase
+ where TStartupModule : IAbpModule
+ {
+ protected ICommentRepository CommentRepository { get; }
+ protected BloggingTestData BloggingTestData { get; }
+
+ protected CommentRepository_Tests()
+ {
+ CommentRepository = GetRequiredService();
+ BloggingTestData = GetRequiredService();
+ }
+
+ [Fact]
+ public async Task GetListOfPostAsync()
+ {
+ var comments = await CommentRepository.GetListOfPostAsync(BloggingTestData.Blog1Post1Id);
+ comments.ShouldNotBeNull();
+ comments.Count.ShouldBe(2);
+ comments.ShouldAllBe(x => x.PostId == BloggingTestData.Blog1Post1Id);
+ }
+
+ [Fact]
+ public async Task GetCommentCountOfPostAsync()
+ {
+ var count = await CommentRepository.GetCommentCountOfPostAsync(BloggingTestData.Blog1Post1Id);
+ count.ShouldBe(2);
+ }
+
+ [Fact]
+ public async Task GetRepliesOfComment()
+ {
+ var comment = await CommentRepository.GetRepliesOfComment(BloggingTestData.Blog1Post1Comment1Id);
+ comment.ShouldNotBeNull();
+ comment.ShouldContain(x => x.Id == BloggingTestData.Blog1Post1Comment2Id);
+ }
+
+ [Fact]
+ public async Task DeleteOfPost()
+ {
+ await CommentRepository.DeleteOfPost(BloggingTestData.Blog1Post1Id);
+ (await CommentRepository.GetListAsync()).ShouldBeEmpty();
+ }
+ }
+}
diff --git a/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/Posts/PostRepository_Tests.cs b/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/Posts/PostRepository_Tests.cs
new file mode 100644
index 0000000000..ee21e200d9
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/Posts/PostRepository_Tests.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using Shouldly;
+using Volo.Abp.Modularity;
+using Xunit;
+
+namespace Volo.Blogging.Posts
+{
+ public abstract class PostRepository_Tests : BloggingTestBase
+ where TStartupModule : IAbpModule
+ {
+ protected IPostRepository PostRepository { get; }
+ protected BloggingTestData BloggingTestData { get; }
+
+ protected PostRepository_Tests()
+ {
+ PostRepository = GetRequiredService();
+ BloggingTestData = GetRequiredService();
+ }
+
+ [Fact]
+ public async Task GetListOfPostAsync()
+ {
+ var posts = await PostRepository.GetPostsByBlogId(BloggingTestData.Blog1Id);
+ posts.ShouldNotBeNull();
+ posts.Count.ShouldBe(2);
+ posts.ShouldContain(x => x.Id == BloggingTestData.Blog1Post1Id);
+ posts.ShouldContain(x => x.Id == BloggingTestData.Blog1Post2Id);
+ }
+
+ [Fact]
+ public async Task GetPostByUrl()
+ {
+ var post = await PostRepository.GetPostByUrl(BloggingTestData.Blog1Id, "url");
+ post.ShouldNotBeNull();
+ post.Url.ShouldBe("url");
+ }
+ }
+}
diff --git a/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/Tagging/TagRepository_Tests.cs b/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/Tagging/TagRepository_Tests.cs
new file mode 100644
index 0000000000..a81c7dde1e
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/Tagging/TagRepository_Tests.cs
@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Shouldly;
+using Volo.Abp.Modularity;
+using Xunit;
+
+namespace Volo.Blogging.Tagging
+{
+ public abstract class TagRepository_Tests : BloggingTestBase
+ where TStartupModule : IAbpModule
+ {
+ protected ITagRepository TagRepository { get; }
+ protected BloggingTestData BloggingTestData { get; }
+
+ protected TagRepository_Tests()
+ {
+ TagRepository = GetRequiredService();
+ BloggingTestData = GetRequiredService();
+ }
+
+ [Fact]
+ public async Task GetListAsync()
+ {
+ var tags = await TagRepository.GetListAsync(BloggingTestData.Blog1Id);
+ tags.ShouldNotBeNull();
+ tags.Count.ShouldBe(2);
+ }
+
+ [Fact]
+ public async Task GetByNameAsync()
+ {
+ var tag = await TagRepository.GetByNameAsync(BloggingTestData.Blog1Id, BloggingTestData.Tag1Name);
+ tag.ShouldNotBeNull();
+ tag.Name.ShouldBe(BloggingTestData.Tag1Name);
+ }
+
+ [Fact]
+ public async Task FindByNameAsync()
+ {
+ var tag = await TagRepository.FindByNameAsync(BloggingTestData.Blog1Id, BloggingTestData.Tag1Name);
+ tag.ShouldNotBeNull();
+ tag.Name.ShouldBe(BloggingTestData.Tag1Name);
+ }
+
+ [Fact]
+ public async Task GetListAsync2()
+ {
+ var tagIds = (await TagRepository.GetListAsync()).Select(x => x.Id).ToList();
+ var tags = await TagRepository.GetListAsync(tagIds);
+ tags.ShouldNotBeNull();
+ tags.Count.ShouldBe(tagIds.Count);
+ }
+
+ [Fact]
+ public async Task DecreaseUsageCountOfTags()
+ {
+ var tag = await TagRepository.FindByNameAsync(BloggingTestData.Blog1Id, BloggingTestData.Tag1Name);
+ var usageCount = tag.UsageCount;
+
+ TagRepository.DecreaseUsageCountOfTags(new List()
+ {
+ tag.Id
+ });
+
+ await TagRepository.FindByNameAsync(BloggingTestData.Blog1Id, BloggingTestData.Tag1Name);
+ (await TagRepository.FindByNameAsync(BloggingTestData.Blog1Id, BloggingTestData.Tag1Name)).UsageCount
+ .ShouldBe(usageCount - 1);
+ }
+ }
+}
diff --git a/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/Users/BlogUserRepository_Tests.cs b/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/Users/BlogUserRepository_Tests.cs
new file mode 100644
index 0000000000..3f0e3b7bf7
--- /dev/null
+++ b/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/Users/BlogUserRepository_Tests.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Volo.Abp.Modularity;
+
+namespace Volo.Blogging.Users
+{
+ public abstract class BlogUserRepository_Tests : BloggingTestBase
+ where TStartupModule : IAbpModule
+ {
+
+ }
+}
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj
index 089a2ca3ab..0a4fdebc1b 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj
@@ -1,5 +1,7 @@
+
+
netcoreapp2.2
diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj b/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj
index 92fdeb6d4c..2664bf2f49 100644
--- a/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj
+++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj
@@ -1,11 +1,15 @@
+
+
- netcoreapp2.2
- $(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
- true
+ netstandard2.0
+ Volo.ClientSimulation.Web
+ Volo.ClientSimulation.Web
Library
+ true
Volo.ClientSimulation
+ 2.8
diff --git a/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj b/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj
index 2917b65816..eb0a9f9ae2 100644
--- a/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj
+++ b/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj
@@ -1,8 +1,12 @@
+
+
- netcoreapp2.2
-
+ netstandard2.0
+ Volo.ClientSimulation
+ Volo.ClientSimulation
+
diff --git a/modules/docs/README.md b/modules/docs/README.md
index 993e009110..ee4e33a785 100644
--- a/modules/docs/README.md
+++ b/modules/docs/README.md
@@ -1,4 +1,4 @@
-# docs module
+# Docs Module
This module is used to create technical documentation web sites. [abp.io](https://abp.io) web site uses this module for its documentation.
### Screenshot
@@ -7,7 +7,7 @@ This module is used to create technical documentation web sites. [abp.io](https:
### Main Features
-* Can read documents from a Github repository.
+* Retrieves documents from a Github repository.
* Supports Markdown document formatting.
* Supports versioning (integrated to Github releases).
-* Support multiple projects.
\ No newline at end of file
+* Supports multiple projects.
diff --git a/modules/docs/Volo.Docs.sln b/modules/docs/Volo.Docs.sln
index 0c3b43a821..4eaa1cd14a 100644
--- a/modules/docs/Volo.Docs.sln
+++ b/modules/docs/Volo.Docs.sln
@@ -23,10 +23,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Docs.Web", "src\Volo.D
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "app", "app", "{555508AD-F593-43E3-9354-9FA51512F181}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.DocsTestApp", "app\Volo.DocsTestApp\Volo.DocsTestApp.csproj", "{30BC20A3-85CE-4907-8FD0-54153C3F190C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.DocsTestApp.EntityFrameworkCore", "app\Volo.DocsTestApp.EntityFrameworkCore\Volo.DocsTestApp.EntityFrameworkCore.csproj", "{A5F88BCB-6B22-4E2D-AE89-AEF1E3DC727A}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "domain", "domain", "{A982A58E-1E92-4764-9F56-39E7AABB8556}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "admin-app", "admin-app", "{BCA19441-17E9-43E6-AED1-15344D18F967}"
@@ -55,6 +51,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Docs.TestBase", "test\
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Docs.Admin.Application.Tests", "test\Volo.Docs.Admin.Application.Tests\Volo.Docs.Admin.Application.Tests.csproj", "{E9CF69BC-EEA6-4621-BE0E-64EE37C89807}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VoloDocs.EntityFrameworkCore", "app\VoloDocs.EntityFrameworkCore\VoloDocs.EntityFrameworkCore.csproj", "{1B459653-8DAC-41CD-A08E-28D6E74265D3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VoloDocs.Web", "app\VoloDocs.Web\VoloDocs.Web.csproj", "{057EA924-4524-4452-840C-5E3D509F2ED3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VoloDocs.Migrator", "app\VoloDocs.Migrator\VoloDocs.Migrator.csproj", "{8A5E5001-C017-44A8-ADDA-DC66C102556E}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -93,14 +95,6 @@ Global
{871FB966-C89F-4AF5-BB1D-172625AA571C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{871FB966-C89F-4AF5-BB1D-172625AA571C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{871FB966-C89F-4AF5-BB1D-172625AA571C}.Release|Any CPU.Build.0 = Release|Any CPU
- {30BC20A3-85CE-4907-8FD0-54153C3F190C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {30BC20A3-85CE-4907-8FD0-54153C3F190C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {30BC20A3-85CE-4907-8FD0-54153C3F190C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {30BC20A3-85CE-4907-8FD0-54153C3F190C}.Release|Any CPU.Build.0 = Release|Any CPU
- {A5F88BCB-6B22-4E2D-AE89-AEF1E3DC727A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A5F88BCB-6B22-4E2D-AE89-AEF1E3DC727A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A5F88BCB-6B22-4E2D-AE89-AEF1E3DC727A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A5F88BCB-6B22-4E2D-AE89-AEF1E3DC727A}.Release|Any CPU.Build.0 = Release|Any CPU
{37D483C8-400B-4127-A6D0-2EE4E80CB696}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{37D483C8-400B-4127-A6D0-2EE4E80CB696}.Debug|Any CPU.Build.0 = Debug|Any CPU
{37D483C8-400B-4127-A6D0-2EE4E80CB696}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -141,6 +135,18 @@ Global
{E9CF69BC-EEA6-4621-BE0E-64EE37C89807}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E9CF69BC-EEA6-4621-BE0E-64EE37C89807}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E9CF69BC-EEA6-4621-BE0E-64EE37C89807}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1B459653-8DAC-41CD-A08E-28D6E74265D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1B459653-8DAC-41CD-A08E-28D6E74265D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1B459653-8DAC-41CD-A08E-28D6E74265D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1B459653-8DAC-41CD-A08E-28D6E74265D3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {057EA924-4524-4452-840C-5E3D509F2ED3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {057EA924-4524-4452-840C-5E3D509F2ED3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {057EA924-4524-4452-840C-5E3D509F2ED3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {057EA924-4524-4452-840C-5E3D509F2ED3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8A5E5001-C017-44A8-ADDA-DC66C102556E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8A5E5001-C017-44A8-ADDA-DC66C102556E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8A5E5001-C017-44A8-ADDA-DC66C102556E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8A5E5001-C017-44A8-ADDA-DC66C102556E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -154,8 +160,6 @@ Global
{30808C64-F590-47F7-AF8A-256F6B6E186B} = {8B0CDFC9-E313-4323-9390-59CFFAAC60B5}
{BF3FDDFF-BED8-422C-82E9-07F181A2D47F} = {8B0CDFC9-E313-4323-9390-59CFFAAC60B5}
{871FB966-C89F-4AF5-BB1D-172625AA571C} = {8B0CDFC9-E313-4323-9390-59CFFAAC60B5}
- {30BC20A3-85CE-4907-8FD0-54153C3F190C} = {555508AD-F593-43E3-9354-9FA51512F181}
- {A5F88BCB-6B22-4E2D-AE89-AEF1E3DC727A} = {555508AD-F593-43E3-9354-9FA51512F181}
{A982A58E-1E92-4764-9F56-39E7AABB8556} = {42416152-5BAB-4706-93A6-57A19E71FE14}
{BCA19441-17E9-43E6-AED1-15344D18F967} = {42416152-5BAB-4706-93A6-57A19E71FE14}
{8B0CDFC9-E313-4323-9390-59CFFAAC60B5} = {42416152-5BAB-4706-93A6-57A19E71FE14}
@@ -169,6 +173,9 @@ Global
{89F895EA-C4A0-4D91-9181-016F78459776} = {59D430A9-AC61-4457-8338-5DA0705ABB5D}
{C8BF652A-6DDF-4E5C-8CBA-BA5AFC50BFE2} = {59D430A9-AC61-4457-8338-5DA0705ABB5D}
{E9CF69BC-EEA6-4621-BE0E-64EE37C89807} = {59D430A9-AC61-4457-8338-5DA0705ABB5D}
+ {1B459653-8DAC-41CD-A08E-28D6E74265D3} = {555508AD-F593-43E3-9354-9FA51512F181}
+ {057EA924-4524-4452-840C-5E3D509F2ED3} = {555508AD-F593-43E3-9354-9FA51512F181}
+ {8A5E5001-C017-44A8-ADDA-DC66C102556E} = {555508AD-F593-43E3-9354-9FA51512F181}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {13691265-2547-4FFF-B757-E8FACB05679D}
diff --git a/modules/docs/app/Volo.DocsTestApp.EntityFrameworkCore/DocsTestAppDbContext.cs b/modules/docs/app/Volo.DocsTestApp.EntityFrameworkCore/DocsTestAppDbContext.cs
deleted file mode 100644
index 78843aed64..0000000000
--- a/modules/docs/app/Volo.DocsTestApp.EntityFrameworkCore/DocsTestAppDbContext.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using Microsoft.EntityFrameworkCore;
-using Volo.Abp.EntityFrameworkCore;
-using Volo.Abp.Identity.EntityFrameworkCore;
-using Volo.Abp.PermissionManagement.EntityFrameworkCore;
-using Volo.Abp.SettingManagement.EntityFrameworkCore;
-using Volo.Docs.EntityFrameworkCore;
-
-namespace Volo.DocsTestApp.EntityFrameworkCore
-{
- public class DocsTestAppDbContext : AbpDbContext
- {
- public DocsTestAppDbContext(DbContextOptions options)
- : base(options)
- {
-
- }
-
- protected override void OnModelCreating(ModelBuilder modelBuilder)
- {
- base.OnModelCreating(modelBuilder);
-
- modelBuilder.ConfigurePermissionManagement();
- modelBuilder.ConfigureSettingManagement();
- modelBuilder.ConfigureIdentity();
- modelBuilder.ConfigureDocs();
- }
- }
-}
diff --git a/modules/docs/app/Volo.DocsTestApp.EntityFrameworkCore/DocsTestAppDbContextFactory.cs b/modules/docs/app/Volo.DocsTestApp.EntityFrameworkCore/DocsTestAppDbContextFactory.cs
deleted file mode 100644
index c69e934b64..0000000000
--- a/modules/docs/app/Volo.DocsTestApp.EntityFrameworkCore/DocsTestAppDbContextFactory.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System.IO;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Design;
-using Microsoft.Extensions.Configuration;
-
-namespace Volo.DocsTestApp.EntityFrameworkCore
-{
- public class DocsTestAppDbContextFactory : IDesignTimeDbContextFactory
- {
- public DocsTestAppDbContext CreateDbContext(string[] args)
- {
- var configuration = BuildConfiguration();
-
- var builder = new DbContextOptionsBuilder()
- .UseSqlServer(configuration.GetConnectionString("SqlServer"));
-
- return new DocsTestAppDbContext(builder.Options);
- }
-
- private static IConfigurationRoot BuildConfiguration()
- {
- var builder = new ConfigurationBuilder()
- .SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../Volo.DocsTestApp/"))
- .AddJsonFile("appsettings.json", optional: false);
-
- return builder.Build();
- }
- }
-}
diff --git a/modules/docs/app/Volo.DocsTestApp.EntityFrameworkCore/DocsTestAppEntityFrameworkCoreModule.cs b/modules/docs/app/Volo.DocsTestApp.EntityFrameworkCore/DocsTestAppEntityFrameworkCoreModule.cs
deleted file mode 100644
index f380f6b9d5..0000000000
--- a/modules/docs/app/Volo.DocsTestApp.EntityFrameworkCore/DocsTestAppEntityFrameworkCoreModule.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Volo.Abp.EntityFrameworkCore.SqlServer;
-using Volo.Abp.Identity.EntityFrameworkCore;
-using Volo.Abp.Modularity;
-using Volo.Abp.PermissionManagement.EntityFrameworkCore;
-using Volo.Abp.SettingManagement.EntityFrameworkCore;
-using Volo.Docs.EntityFrameworkCore;
-
-namespace Volo.DocsTestApp.EntityFrameworkCore
-{
- [DependsOn(
- typeof(DocsEntityFrameworkCoreModule),
- typeof(AbpIdentityEntityFrameworkCoreModule),
- typeof(AbpPermissionManagementEntityFrameworkCoreModule),
- typeof(AbpSettingManagementEntityFrameworkCoreModule),
- typeof(AbpEntityFrameworkCoreSqlServerModule))]
- public class DocsTestAppEntityFrameworkCoreModule : AbpModule
- {
-
- }
-}
diff --git a/modules/docs/app/Volo.DocsTestApp.EntityFrameworkCore/Migrations/20181225134002_Initial20181225.Designer.cs b/modules/docs/app/Volo.DocsTestApp.EntityFrameworkCore/Migrations/20181225134002_Initial20181225.Designer.cs
deleted file mode 100644
index cfa52c4ddc..0000000000
--- a/modules/docs/app/Volo.DocsTestApp.EntityFrameworkCore/Migrations/20181225134002_Initial20181225.Designer.cs
+++ /dev/null
@@ -1,465 +0,0 @@
-//
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using Volo.DocsTestApp.EntityFrameworkCore;
-
-namespace Volo.DocsTestApp.EntityFrameworkCore.Migrations
-{
- [DbContext(typeof(DocsTestAppDbContext))]
- [Migration("20181225134002_Initial20181225")]
- partial class Initial20181225
- {
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "2.1.1-rtm-30846")
- .HasAnnotation("Relational:MaxIdentifierLength", 128)
- .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("ConcurrencyStamp")
- .IsConcurrencyToken()
- .IsRequired()
- .HasColumnName("ConcurrencyStamp")
- .HasMaxLength(256);
-
- b.Property("Description")
- .HasMaxLength(256);
-
- b.Property("ExtraProperties")
- .HasColumnName("ExtraProperties");
-
- b.Property("IsStatic");
-
- b.Property("Name")
- .IsRequired()
- .HasMaxLength(256);
-
- b.Property("Regex")
- .HasMaxLength(512);
-
- b.Property("RegexDescription")
- .HasMaxLength(128);
-
- b.Property("Required");
-
- b.Property("ValueType");
-
- b.HasKey("Id");
-
- b.ToTable("AbpClaimTypes");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("ConcurrencyStamp")
- .IsConcurrencyToken()
- .IsRequired()
- .HasColumnName("ConcurrencyStamp")
- .HasMaxLength(256);
-
- b.Property("ExtraProperties")
- .HasColumnName("ExtraProperties");
-
- b.Property("IsDefault")
- .HasColumnName("IsDefault");
-
- b.Property("IsPublic")
- .HasColumnName("IsPublic");
-
- b.Property("IsStatic")
- .HasColumnName("IsStatic");
-
- b.Property("Name")
- .IsRequired()
- .HasMaxLength(256);
-
- b.Property("NormalizedName")
- .IsRequired()
- .HasMaxLength(256);
-
- b.Property("TenantId");
-
- b.HasKey("Id");
-
- b.HasIndex("NormalizedName");
-
- b.ToTable("AbpRoles");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("ClaimType")
- .IsRequired()
- .HasMaxLength(256);
-
- b.Property("ClaimValue")
- .HasMaxLength(1024);
-
- b.Property("RoleId");
-
- b.Property("TenantId");
-
- b.HasKey("Id");
-
- b.HasIndex("RoleId");
-
- b.ToTable("AbpRoleClaims");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("AccessFailedCount")
- .ValueGeneratedOnAdd()
- .HasColumnName("AccessFailedCount")
- .HasDefaultValue(0);
-
- b.Property("ConcurrencyStamp")
- .IsConcurrencyToken()
- .HasColumnName("ConcurrencyStamp");
-
- b.Property("CreationTime")
- .HasColumnName("CreationTime");
-
- b.Property("CreatorId")
- .HasColumnName("CreatorId");
-
- b.Property("DeleterId")
- .HasColumnName("DeleterId");
-
- b.Property("DeletionTime")
- .HasColumnName("DeletionTime");
-
- b.Property("Email")
- .HasColumnName("Email")
- .HasMaxLength(256);
-
- b.Property("EmailConfirmed")
- .ValueGeneratedOnAdd()
- .HasColumnName("EmailConfirmed")
- .HasDefaultValue(false);
-
- b.Property("ExtraProperties")
- .HasColumnName("ExtraProperties");
-
- b.Property("IsDeleted")
- .ValueGeneratedOnAdd()
- .HasColumnName("IsDeleted")
- .HasDefaultValue(false);
-
- b.Property("LastModificationTime")
- .HasColumnName("LastModificationTime");
-
- b.Property("LastModifierId")
- .HasColumnName("LastModifierId");
-
- b.Property("LockoutEnabled")
- .ValueGeneratedOnAdd()
- .HasColumnName("LockoutEnabled")
- .HasDefaultValue(false);
-
- b.Property("LockoutEnd");
-
- b.Property("Name")
- .HasColumnName("Name")
- .HasMaxLength(64);
-
- b.Property("NormalizedEmail")
- .HasColumnName("NormalizedEmail")
- .HasMaxLength(256);
-
- b.Property("NormalizedUserName")
- .IsRequired()
- .HasColumnName("NormalizedUserName")
- .HasMaxLength(256);
-
- b.Property("PasswordHash")
- .HasColumnName("PasswordHash")
- .HasMaxLength(256);
-
- b.Property("PhoneNumber")
- .HasColumnName("PhoneNumber")
- .HasMaxLength(16);
-
- b.Property("PhoneNumberConfirmed")
- .ValueGeneratedOnAdd()
- .HasColumnName("PhoneNumberConfirmed")
- .HasDefaultValue(false);
-
- b.Property("SecurityStamp")
- .IsRequired()
- .HasColumnName("SecurityStamp")
- .HasMaxLength(256);
-
- b.Property("Surname")
- .HasColumnName("Surname")
- .HasMaxLength(64);
-
- b.Property("TenantId")
- .HasColumnName("TenantId");
-
- b.Property("TwoFactorEnabled")
- .ValueGeneratedOnAdd()
- .HasColumnName("TwoFactorEnabled")
- .HasDefaultValue(false);
-
- b.Property("UserName")
- .IsRequired()
- .HasColumnName("UserName")
- .HasMaxLength(256);
-
- b.HasKey("Id");
-
- b.HasIndex("Email");
-
- b.HasIndex("NormalizedEmail");
-
- b.HasIndex("NormalizedUserName");
-
- b.HasIndex("UserName");
-
- b.ToTable("AbpUsers");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("ClaimType")
- .IsRequired()
- .HasMaxLength(256);
-
- b.Property("ClaimValue")
- .HasMaxLength(1024);
-
- b.Property("TenantId");
-
- b.Property("UserId");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AbpUserClaims");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b =>
- {
- b.Property("UserId");
-
- b.Property("LoginProvider")
- .HasMaxLength(64);
-
- b.Property("ProviderDisplayName")
- .HasMaxLength(128);
-
- b.Property("ProviderKey")
- .IsRequired()
- .HasMaxLength(196);
-
- b.Property("TenantId");
-
- b.HasKey("UserId", "LoginProvider");
-
- b.HasIndex("LoginProvider", "ProviderKey");
-
- b.ToTable("AbpUserLogins");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b =>
- {
- b.Property("UserId");
-
- b.Property("RoleId");
-
- b.Property("TenantId");
-
- b.HasKey("UserId", "RoleId");
-
- b.HasIndex("RoleId", "UserId");
-
- b.ToTable("AbpUserRoles");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b =>
- {
- b.Property("UserId");
-
- b.Property