diff --git a/test/mock_user_mgr.hpp b/test/mock_user_mgr.hpp
index 3440299..99f2b37 100644
--- a/test/mock_user_mgr.hpp
+++ b/test/mock_user_mgr.hpp
@@ -17,6 +17,7 @@
     MOCK_METHOD0(getPrivilegeMapperObject, DbusUserObj());
     MOCK_METHOD1(userLockedForFailedAttempt, bool(const std::string& userName));
     MOCK_METHOD1(userPasswordExpired, bool(const std::string& userName));
+    MOCK_METHOD1(isUserEnabled, bool(const std::string& userName));
     MOCK_CONST_METHOD1(getPrimaryGroup, gid_t(const std::string& userName));
     MOCK_CONST_METHOD3(isGroupMember,
                        bool(const std::string& userName, gid_t primaryGid,
diff --git a/test/user_mgr_test.cpp b/test/user_mgr_test.cpp
index 9c825a4..cf623ae 100644
--- a/test/user_mgr_test.cpp
+++ b/test/user_mgr_test.cpp
@@ -44,6 +44,16 @@
         sdbusplus::message::object_path tempObjPath(usersObjPath);
         tempObjPath /= userName;
         std::string userObj(tempObjPath);
+        if (enabled)
+        {
+            ON_CALL(mockManager, isUserEnabled)
+                .WillByDefault(testing::Return(true));
+        }
+        else
+        {
+            ON_CALL(mockManager, isUserEnabled)
+                .WillByDefault(testing::Return(false));
+        }
         mockManager.usersList.emplace(
             userName, std::make_unique<phosphor::user::Users>(
                           mockManager.bus, userObj.c_str(), groupNames, priv,
@@ -261,7 +271,21 @@
         pwHistoryConfigFile = tempPWHistoryConfigFile;
         pwQualityConfigFile = tempPWQualityConfigFile;
 
-        ON_CALL(*this, executeUserAdd).WillByDefault(testing::Return());
+        ON_CALL(*this, executeUserAdd(testing::_, testing::_, testing::_,
+                                      testing::Eq(true)))
+            .WillByDefault(
+                [this]() {
+            ON_CALL(*this, isUserEnabled).WillByDefault(testing::Return(true));
+            testing::Return();
+            });
+
+        ON_CALL(*this, executeUserAdd(testing::_, testing::_, testing::_,
+                                      testing::Eq(false)))
+            .WillByDefault(
+                [this]() {
+            ON_CALL(*this, isUserEnabled).WillByDefault(testing::Return(false));
+            testing::Return();
+            });
 
         ON_CALL(*this, executeUserDelete).WillByDefault(testing::Return());
 
@@ -275,8 +299,21 @@
         ON_CALL(*this, executeUserModify(testing::_, testing::_, testing::_))
             .WillByDefault(testing::Return());
 
-        ON_CALL(*this, executeUserModifyUserEnable)
-            .WillByDefault(testing::Return());
+        ON_CALL(*this,
+                executeUserModifyUserEnable(testing::_, testing::Eq(true)))
+            .WillByDefault(
+                [this]() {
+            ON_CALL(*this, isUserEnabled).WillByDefault(testing::Return(true));
+            testing::Return();
+            });
+
+        ON_CALL(*this,
+                executeUserModifyUserEnable(testing::_, testing::Eq(false)))
+            .WillByDefault(
+                [this]() {
+            ON_CALL(*this, isUserEnabled).WillByDefault(testing::Return(false));
+            testing::Return();
+            });
 
         ON_CALL(*this, executeGroupCreation(testing::_))
             .WillByDefault(testing::Return());
@@ -321,6 +358,8 @@
 
     MOCK_METHOD(void, executeGroupDeletion, (const char*), (override));
 
+    MOCK_METHOD(bool, isUserEnabled, (const std::string& userName), (override));
+
   protected:
     static sdbusplus::bus_t busInTest;
     std::string tempFaillockConfigFile;
diff --git a/user_mgr.hpp b/user_mgr.hpp
index d7b731c..6addc49 100644
--- a/user_mgr.hpp
+++ b/user_mgr.hpp
@@ -171,6 +171,14 @@
      */
     void userEnable(const std::string& userName, bool enabled);
 
+    /** @brief get user enabled state
+     *  method to get user enabled state.
+     *
+     *  @param[in] userName - name of the user
+     *  @return - user enabled status (true/false)
+     */
+    virtual bool isUserEnabled(const std::string& userName);
+
     /** @brief update minimum password length requirement
      *
      *  @param[in] val - minimum password length
@@ -444,14 +452,6 @@
      */
     UserSSHLists getUserAndSshGrpList(void);
 
-    /** @brief get user enabled state
-     *  method to get user enabled state.
-     *
-     *  @param[in] userName - name of the user
-     *  @return - user enabled status (true/false)
-     */
-    bool isUserEnabled(const std::string& userName);
-
     /** @brief initialize the user manager objects
      *  method to initialize the user manager objects accordingly
      *
diff --git a/users.cpp b/users.cpp
index 8d6df6a..3440b94 100644
--- a/users.cpp
+++ b/users.cpp
@@ -140,7 +140,7 @@
  */
 bool Users::userEnabled(void) const
 {
-    return UsersIface::userEnabled();
+    return manager.isUserEnabled(userName);
 }
 
 void Users::setUserEnabled(bool value)
