public void GetGanttExclude_WhenCalled_ReturnsString()
        {
            // Arrange
            const short workDayStartHour = 9;
            const short workDayEndHour   = 6;

            var expected = new StringBuilder();

            expected.Append("d#0:00~9:00#4;d#14:00~15:00#4;d#6:00~24:00#4;")
            .Append("w#2008-01-06~2008-01-07#5;")
            .Append("w#2008-01-08~2008-01-09#5;")
            .Append("w#2008-01-09~2008-01-10#5;")
            .Append("w#2008-01-10~2008-01-11#5;")
            .Append("w#2008-01-11~2008-01-12#5;")
            .Append("w#2008-01-12~2008-01-13#5;")
            .Append("2016-01-10~2016-01-11#3;")
            .Append("2016-01-10 00:00~2016-01-10 9:00;2016-01-10 5:00~2016-01-11 24:00#3");

            var dataTable = new DataTable();

            dataTable.Columns.Add(DateColumn);
            dataTable.Columns.Add(HoursColumn);
            var row = dataTable.NewRow();

            row[DateColumn]  = "2016-01-10";
            row[HoursColumn] = string.Empty;
            dataTable.Rows.Add(row);
            row              = dataTable.NewRow();
            row[DateColumn]  = "2016-01-10";
            row[HoursColumn] = "1";
            dataTable.Rows.Add(row);

            var regionalSettings = new ShimSPRegionalSettings()
            {
                WorkDaysGet = () => 2
            };

            ShimCoreFunctions.getLockedWebSPWeb = _ => guid;
            ShimSPListItemCollection.AllInstances.GetDataTable = _ => dataTable;

            // Act
            var actual = (string)privateObject.Invoke(
                GetGanttExcludeMethodName,
                BindingFlags.Instance | BindingFlags.NonPublic,
                new object[] { regionalSettings.Instance, spWeb.Instance, workDayStartHour, workDayEndHour });

            // Assert
            actual.ShouldBe(expected.ToString());
        }
        public void GetLayout_WhenCalled_ReturnsString()
        {
            // Arrange
            const string data           = "<xmlcfg/>";
            const string layoutXml      = @"
                <xmlcfg>
                    <Header/>
                    <Cols/>
                </xmlcfg>";
            const string fieldsResponse = @"
                <xmlcfg>
                    <Error>Error</Error>
                    <GetMyWorkFields>
                        <Data>
                            <Field Name=""FieldName1""/>
                            <Field Name=""FieldName2""/>
                        </Data>
                    </GetMyWorkFields>
                </xmlcfg>";

            var validationCount  = 0;
            var regionalSettings = new ShimSPRegionalSettings()
            {
                LocaleIdGet         = () => 1033,
                WorkDayStartHourGet = () => 540,
                WorkDayEndHourGet   = () => 1080
            };

            spWeb.RegionalSettingsGet = () => regionalSettings;
            ShimResourceManager.AllInstances.GetStringStringCultureInfo = (_, _1, _2) => layoutXml;
            ShimWorkEngineAPI.AllInstances.ExecuteStringString          = (_, _1, _2) => fieldsResponse;
            ShimUtilities.DecodeGridDataString = input => input;
            ShimGridManager.RegisterGridIdAndCssXElementXDocument = (_, __) =>
            {
                validationCount = validationCount + 1;
            };
            ShimGridManager.AllInstances.GetGanttExcludeSPRegionalSettingsSPWebInt16Int16 = (_, _1, _2, _3, _4) =>
            {
                validationCount = validationCount + 1;
                return(string.Empty);
            };
            ShimGridManager.ConfigureDefaultColumnsSPListStringStringSPWebInt16Int16StringXDocumentRefListOfStringRef =
                (SPList spList, string datePattern, string currencyFormat,
                 SPWeb spWeb, short workDayStartHour, short workDayEndHour,
                 string ganttExclude, ref XDocument layoutXmlParam, ref List <string> defaultColumns) =>
            {
                validationCount = validationCount + 1;
            };
            ShimGridManager.ConfigureColumnsSPWebStringXElementRefXElementRefStringListOfStringIEnumerableOfStringSPList =
                (SPWeb spWeb, string currencyFormat, ref XElement headerElement,
                 ref XElement colsElement, string datePattern, List <string> defaultColumns,
                 IEnumerable <string> fields, SPList spList) =>
            {
                validationCount = validationCount + 1;
            };

            // Act
            var actual = (string)privateObject.Invoke(
                GetLayoutMethodName,
                BindingFlags.Instance | BindingFlags.Public,
                new object[] { data });

            // Assert
            validationCount.ShouldBe(4);
        }