[工作流RoadFlow迁移至Core-3]Home-Index

源代码解释:

1.依赖注入3个业务层接口:IUsersBll、IUsersRoleBll、IRoleBll,并初始化

2.CurrentUserId和CurrentUser 在父类MyController中实现(public class HomeController : MyController)

private readonly IUsersRoleBll _buserRole;
        private readonly IRoleBll _brole;

        public HomeController(IUsersBll busers, IUsersRoleBll usersRoleBll, IRoleBll brole) : base(busers)
        {
            _buserRole = usersRoleBll;
            _brole = brole;
        }

        //
        // GET: /Home/
        public ActionResult Index()
        {
            var roles = _buserRole.GetByUserId(CurrentUserId);
            ViewBag.CurrentUserID = CurrentUserId;
            ViewBag.RoleLength = roles.Count;
            ViewBag.DefaultRoleID = string.Empty;
            ViewBag.RolesOptions = string.Empty;
            if (roles.Count > 0)
            {
                var mainRole = roles.Find(p => p.IsDefault);
                ViewBag.defaultRoleID = mainRole != null ? mainRole.RoleId.ToString() : roles.First().RoleId.ToString();
                List<Role> roleList = new List<Role>();
                foreach (var role in roles)
                {
                    var role1 = _brole.Get(role.RoleId);
                    if (role1 != null)
                    {
                        roleList.Add(role1);
                    }
                }

                ViewBag.RolesOptions = _brole.GetRoleOptions("", "", roleList);
            }

            var user = CurrentUser;

            ViewBag.UserName = user != null ? user.Name : "";
            ViewBag.DateTime = DateTimeNew.Now.ToDateWeekString();

            return View();
        }

  测试代码

[Fact]
        public void HomeIndex正常显示()
        {
            // Arange
            // -1)
            Users newUsers = new Users()
            {
                Name = "朱杯"
            };

            // 0)
            var httpContext = new DefaultHttpContext();
            httpContext.Session = new TestSession();
            httpContext.Session.SetString(Keys.SessionKeys.UserId.ToString(), "cc5884c0-2d85-4cdd-932c-97dac6ec7282");
            httpContext.Session.SetString(Keys.SessionKeys.User.ToString(), newUsers.ToJsonString());

            // 1)
            var mockUsersBll = Substitute.For<IUsersBll>();
            var mockUsersRoleBll = Substitute.For<IUsersRoleBll>();
            var mockRoleBll = Substitute.For<IRoleBll>();

            // 2)
            List<UsersRole> usersRolesList = new List<UsersRole>()
            {
                new UsersRole
                {
                    MemberId = Guid.Parse("cc5884c0-2d85-4cdd-932c-97dac6ec7282"),
                    RoleId = Guid.Parse("cc5884c0-2d85-4cdd-932c-97dac6ec7283"),
                    IsDefault = true
                },
                new UsersRole()
                {
                    MemberId = Guid.Parse("cc5884c0-2d85-4cdd-932c-97dac6ec7282"),
                    RoleId = Guid.Parse("cc5884c0-2d85-4cdd-932c-97dac6ec7284"),
                    IsDefault = false
                }
            };
            Role role1 = new Role()
            {
                Id = Guid.Parse("cc5884c0-2d85-4cdd-932c-97dac6ec7283"),
                Name = "财务",
                Note = "财务",
                UseMember = "财务菜单"
            };
            Role role2 = new Role()
            {
                Id = Guid.Parse("cc5884c0-2d85-4cdd-932c-97dac6ec7284"),
                Name = "销售",
                Note = "销售",
                UseMember = "销售菜单"
            };
            List<Role> roleList = new List<Role>()
            {
                role1,
                role2
            };

            // 3)
            mockUsersRoleBll.GetByUserId(Guid.Parse("cc5884c0-2d85-4cdd-932c-97dac6ec7282")).Returns(usersRolesList);
            mockRoleBll.Get(Guid.Parse("cc5884c0-2d85-4cdd-932c-97dac6ec7283")).Returns(role1);
            mockRoleBll.Get(Guid.Parse("cc5884c0-2d85-4cdd-932c-97dac6ec7284")).Returns(role2);
            //mockUsersBll.Get(Guid.Parse("cc5884c0-2d85-4cdd-932c-97dac6ec7282")).ReturnsNull();

            // 4)
            mockRoleBll.GetRoleOptions("", "", Arg.Any<List<Role>>()).Returns("<option value=\"cc5884c0-2d85-4cdd-932c-97dac6ec7283\" selected=\"selected\">财务</option>" +
                                                                 "<option value=\"cc5884c0-2d85-4cdd-932c-97dac6ec7284\" >销售</option>");

            // Act
            var controller = new HomeController(mockUsersBll, mockUsersRoleBll, mockRoleBll);
            controller.ControllerContext.HttpContext = httpContext;
            var result = controller.Index();
            var viewResult = result.ShouldBeOfType<ViewResult>();
            Console.WriteLine("测试测试测试");
            Console.WriteLine("ViewBag.RoleLength:-------------- {0} --------------", controller.ViewBag.RoleLength);
            Console.WriteLine("ViewBag.RolesOptions:-------------- {0} --------------", controller.ViewBag.RolesOptions);

        }

  

时间: 2024-11-04 22:56:25

[工作流RoadFlow迁移至Core-3]Home-Index的相关文章

Net开源工作流Roadflow的使用与集成

Net开源工作流Roadflow的使用与集成 在环境搭建好之后,我们就来学习一下怎样快速创建一个流程,并执行和流转该流程(我们这里讲的只是入门,不涉及到具体流程参数设置). 创建一个流程步骤为:在数据库在创建表-->设计表单-->设置流程-->配置菜单  即可点击新配置的菜单运行该流程. 1.创建业务数据表 根据自己的业务需求我们创建自己的业务表: 建表注意事项: 表必须要有一个主键,主键只能是int型的自增字段或者uniqueidentifier(guid)类型. 2.设计表单 打开表

[.NET Core 24]把project.json迁移到.csproj

链接:https://blog.jetbrains.com/dotnet/2017/04/04/rider-eap-update-csproj-based-net-core-support-migrate/ how to migrate from the (deprecated) project.json format to the new .csproj format. First, Microsoft greatly simplified the .csprojformat. In mini

[.NET Core 4]测试验证功能(相较于core教程属于新增)

sqllite 的数据库迁移功能有限制 1)新增如下model,执行数据库迁移不能成功,参考此链接“http://stackoverflow.com/questions/35797628/ef7-generates-wrong-migrations-with-sqlite” 初步判断有限制,所以删除数据库,删除迁移文件,重建数据库“http://www.atove.com/Article/Details/87E62DFDDBF9EC0C5350E7ACD43BADDF”(这篇文章是非.net c

[.NET Core 32]升级vs code之后,vs code无法调试net core web项目

错误提示&处理方法 参考链接:https://github.com/OmniSharp/omnisharp-vscode/issues/1742 错误:The .NET Core debugger cannot be installed. The debugger requires macOS 10.12 (Sierra) or newer 方法:You can set the option to disable auto extension updates in VS Code, and th

Ubuntu-Docker[1]安装Docker,通过Docker部署net core代码,需要结合[.NET Core 18]发布、ASP.NET Core Docker部署

1)通过系统自带包安装 通过自带包安装,可能Docker版本较旧 $ sudo apt-get update Reading package lists... Done $ sudo apt-get install -y docker.io {{{-y表示同意.没有-y也可执行,系统会问是否安装,输入y回车即可 apt-get -y install这个指令则是跳过系统提示,直接安装.}}} Adding group `docker' (GID 121) ... Done. docker star

[.NET Core 4]继续第三篇

一 使用数据库,生成原始数据 原文链接:http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-2_4_5-working-with-sql.html 基础知识:ApplicationDbContext 类负责连接数据库并将 Movie 对象和数据记录进行映射. Startup.cs 文件中,数据库上下文是在 ConfigureServices 方法中用 Dependency Injection 容器进行注册的. 我在ApplicationDbConte

java基础三 [深入多态,接口和多态](阅读Head First Java记录)

抽象类和抽象方法 1.抽象类的声明方法,在前面加上抽象类的关键词abstract abstract class canine extends animal{ public void roam(){} } 抽象类除了被继承过之外,是没有用途,没有值,没有目的.类中的方法可以当做子类的合约内容,合约是对其他程序的承诺协议 抽象类中可以带有抽象和非抽象的方法 如果类中有抽象方法,则类必定标识为抽象的. 2.抽象的方法没有实体 (因为方法中的程序代码没有意义.抽象类需要被extend过有意义,抽象方法一

.net framework(4.6.2) 迁移 .net core(2.2) 总结

1.创建EF的类库,同时将此项目设置为启动项(为Scaffold-DbContext -tables指令使用),同时安装2个包   1).Microsoft.EntityFrameworkCore.Tools  2).Pomelo.EntityFrameworkCore.MySql (这个是第三方的ef mysql 中间件) Scaffold-DbContext -Force "Server=127.0.0.1;User Id=root;Password=123456;Database=test

UVa 1374 - Power Calculus——[迭代加深搜索、快速幂]

解题思路: 这是一道以快速幂计算为原理的题,实际上也属于求最短路径的题目类型.那么我们可以以当前求出的幂的集合为状态,采用IDA*方法即可求解.问题的关键在于如何剪枝效率更高.笔者采用的剪枝方法是: 1)如果当前状态幂集合中的最大元素max满足 max*2^(maxd-cur_d)<n,则剪枝.原因是:在每一次状态转移后,max最多增大一倍.(maxd-cur_d)次转移之后,max最多变成原来的2^(maxd-cur_d)倍,然而如果当前状态的极限情况下仍有max<n,则当前状态结点一定无法