Example #1
0
        public void DataTest()
        {
            const int streams = 9;

            var currentAvailabilities = new CourseStreamAvailability[streams];
            var availabilitiesStruct  = new AvailableCourseStreams();

            AssertAvailabilities();

            AdjustAssertAvailabilities(1, CourseStreamAvailability.Mandatory);
            AdjustAssertAvailabilities(2, CourseStreamAvailability.Optional);
            AdjustAssertAvailabilities(3, CourseStreamAvailability.Optional);
            AdjustAssertAvailabilities(1, CourseStreamAvailability.Optional);
            AdjustAssertAvailabilities(1, CourseStreamAvailability.None);
            AdjustAssertAvailabilities(streams - 1, CourseStreamAvailability.Mandatory);

            void AdjustAssertAvailabilities(int index, CourseStreamAvailability availability)
            {
                AdjustAvailability(index, availability);
                AssertAvailabilities();
            }

            void AdjustAvailability(int index, CourseStreamAvailability availability)
            {
                currentAvailabilities[index] = availabilitiesStruct[index] = availability;
            }

            void AssertAvailabilities()
            {
                for (int i = 0; i < streams; i++)
                {
                    Assert.AreEqual(currentAvailabilities[i], availabilitiesStruct[i]);
                }
            }
        }
Example #2
0
        public void ToStringTest()
        {
            var availabilitiesStruct = new AvailableCourseStreams();

            Assert.AreEqual("None", availabilitiesStruct.ToString());

            availabilitiesStruct[1] = CourseStreamAvailability.Mandatory;
            availabilitiesStruct[3] = CourseStreamAvailability.Mandatory;
            availabilitiesStruct[8] = CourseStreamAvailability.Optional;

            Assert.AreEqual("1 - Mandatory, 3 - Mandatory, 8 - Optional", availabilitiesStruct.ToString());
        }
        private void LoadCourses()
        {
            using (var package = new ExcelPackage(new FileInfo(courseInformationSpreadsheetLocation)))
            {
                #region Courses Sheet
                var coursesSheet = package.Workbook.Worksheets[0];

                var courses = new List <Course>();

                // This is awful, but the whole process is awful too
                int currentRow = 3;
                int semester   = 6;
                while (true)
                {
                    var code = coursesSheet.Cells[currentRow, 1].Value?.ToString();

                    if (string.IsNullOrEmpty(code))
                    {
                        break;
                    }

                    var name       = coursesSheet.Cells[currentRow, 2].Value.ToString();
                    var ects       = int.Parse(coursesSheet.Cells[currentRow, 3].Value.ToString());
                    var hours      = int.Parse(coursesSheet.Cells[currentRow, 4].Value.ToString());
                    var stringType = coursesSheet.Cells[currentRow, 5].Value.ToString();

                    var streams = new AvailableCourseStreams();
                    for (int i = 0; i < 9; i++)
                    {
                        var availability = coursesSheet.Cells[currentRow, 6 + i].Value?.ToString();
                        streams[i] = availability switch
                        {
                            "Υ" => CourseStreamAvailability.Mandatory,
                            "Ε" => CourseStreamAvailability.Optional,
                            _ => CourseStreamAvailability.None
                        };
                    }

                    var professor1 = coursesSheet.Cells[currentRow, 15].Value.ToString();

                    string professor2 = null;
                    if (!coursesSheet.Cells[currentRow, 15].Merge)
                    {
                        professor2 = coursesSheet.Cells[currentRow, 16].Value.ToString();
                    }

                    var type = stringType switch
                    {
                        "ΥΚΕ" => CourseType.MandatoryInCourseStream,
                        "ΓΕ" => CourseType.Mandatory,
                        "Ε" => CourseType.Optional,
                    };

                    var course = new Course(code, name, ects, hours, type, semester, streams, professor1, professor2);
                    courses.Add(course);

                    if (coursesSheet.Cells[currentRow, 1].Style.Border.Bottom.Style != ExcelBorderStyle.None)
                    {
                        semester++;
                    }

                    currentRow++;
                }
                #endregion

                #region Course Streams Sheet
                var courseStreamsSheet = package.Workbook.Worksheets[1];

                var courseStreams = new Dictionary <string, string>(9);
                for (int i = 0; i < 9; i++)
                {
                    var streamIndex = courseStreamsSheet.Cells[2, 2 + i * 2].Value.ToString();
                    var streamTitle = courseStreamsSheet.Cells[2, 3 + i * 2].Value.ToString();

                    courseStreams.Add(streamIndex, streamTitle);
                }
                #endregion

                CoursesInformation = new CoursesInformation(courses, courseStreams);
            }
        }