From fcfbb1584ce9ea82a4e2ae08832ff305fefe61e6 Mon Sep 17 00:00:00 2001
From: Anton Bagliy <taccessviolation@gmail.com>
Date: Sat, 31 Aug 2019 19:36:48 +0300
Subject: [PATCH] ADD: send grades with user nickname, subject and submodule id
 #61

---
 NunitReportParser/Program.cs |  90 +++---
 grades/Grades.json           | 567 +++++++++++++++++++++++------------
 2 files changed, 418 insertions(+), 239 deletions(-)

diff --git a/NunitReportParser/Program.cs b/NunitReportParser/Program.cs
index 88a3869..ebda29c 100644
--- a/NunitReportParser/Program.cs
+++ b/NunitReportParser/Program.cs
@@ -31,61 +31,64 @@ namespace NunitReport
                 }
                 else
                 {
-                    ParseTestSuite(child);   
+                    ParseTestSuite(child);
                 }
             }
         }
 
-        static void SendGrades(JObject settings, int recordBookID, int submoduleID, int disciplineID, double value)
+        static void SendGrades(JObject settings, string nickname, int submoduleNumber, int semester, string service,
+            string subject, double value)
         {
             //System.Console.Out.WriteLine("{0}-{1}-{2}-{3}", RecordBookID, SubmoduleID, DisciplineID, value);
             string gradeToken = (string) settings["GradeService"]["token"];
             string gradeUrl = (string) settings["GradeService"]["url"];
             string url = gradeUrl + "api/v0/sendGrades?token=" + gradeToken;
-            System.Console.Out.WriteLine(url);
+            //System.Console.Out.WriteLine(url);
             WebRequest request;
             request = WebRequest.Create(url);
             request.Method = "PUT";
             request.ContentType = "application/json charset=utf-8";
-            
+
             using (var streamWriter = new StreamWriter(request.GetRequestStream()))
             {
-                string json = "{\"discipline\":"+ disciplineID.ToString() +"," +
-                               "\"recordbook\":"+ recordBookID.ToString() +"," +
-                               "\"submodules\": [" +
-                               "{" +
-                               "\"id\":" + submoduleID.ToString() + "," + 
-                               "\"value\":" + value.ToString(System.Globalization.CultureInfo.InvariantCulture) +
-                               "}" +
-                               "]" +
+                string json = "{\"subject\":\"" + subject + "\"," +
+                              "\"nick\":\"" + nickname + "\"," +
+                              "\"semester\":" + semester.ToString() + "," +
+                              "\"service\":\"" + service + "\"," +
+                              "\"submodules\": [" +
+                              "{" +
+                              "\"number\":" + submoduleNumber.ToString() + "," +
+                              "\"value\":" + value.ToString(System.Globalization.CultureInfo.InvariantCulture) +
+                              "}" +
+                              "]" +
                               "}";
 
-                System.Console.WriteLine(json);
+                //System.Console.WriteLine(json);
                 streamWriter.Write(json);
             }
-            
+
             Stream objStream;
             var httpResponse = (HttpWebResponse) request.GetResponse();
             using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
             {
                 var result = streamReader.ReadToEnd();
-                System.Console.Out.WriteLine(result);
+                // System.Console.Out.WriteLine(result);
             }
         }
 
         static void CountGrades(string userName)
         {
-            string configPath = @"../../../grades/Grades.json"; 
+            string configPath = @"../../../grades/Grades.json";
             if (basePath != "")
             {
                 configPath = basePath + @"/grades/Grades.json";
             }
-            
+
             JObject grades = JObject.Parse(File.ReadAllText(configPath));
 
-            JArray tasks = (JArray) grades["Tasks"];
+            JArray tasks = (JArray) grades["Projects"];
 
-            var countedGrades = new Dictionary<string, double>();
+            var countedGrades = new Dictionary<int, double>();
             foreach (XmlNode testcase in cases)
             {
                 string caseClass;
@@ -94,7 +97,8 @@ namespace NunitReport
                 {
                     caseClass = testcase.Attributes["classname"].Value.Split('.')[0];
                     caseName = testcase.Attributes["name"].Value;
-                } catch(Exception e)
+                }
+                catch (Exception e)
                 {
                     string[] fullName = testcase.Attributes["name"].Value.Split('.');
                     caseClass = fullName[0];
@@ -103,17 +107,18 @@ namespace NunitReport
 
                 foreach (JObject task in tasks)
                 {
-                    if ((string) task["name"] == caseClass)
+                    if ((string) task["namespace"] == caseClass)
                     {
-                        double maxGrade = (double) task["grades"][caseName];
+                        double maxGrade = (double) task["tests"][caseName]["grade"];
+                        int subModuleNumber = (int) task["tests"][caseName]["subModuleNumber"];
                         if (testcase.Attributes["result"].Value == "Passed")
                         {
-                            if (!countedGrades.ContainsKey(caseClass))
+                            if (!countedGrades.ContainsKey(subModuleNumber))
                             {
-                                countedGrades[caseClass] = 0;
+                                countedGrades[subModuleNumber] = 0;
                             }
 
-                            countedGrades[caseClass] += maxGrade;
+                            countedGrades[subModuleNumber] += maxGrade;
                         }
                     }
                 }
@@ -121,38 +126,23 @@ namespace NunitReport
                 //System.Console.Out.WriteLine(countedGrades[caseClass]);
             }
 
-            int discipline = (int) grades["Discipline"]["ID"];
-            
-            foreach (KeyValuePair<string, double> g in countedGrades)
+            string subject = (string) grades["Discipline"]["Subject"];
+            int semester = (int) grades["Discipline"]["Semester"];
+            string nick = userName;
+            string service = (string) grades["Service"];
+
+            foreach (KeyValuePair<int, double> g in countedGrades)
             {
                 if (g.Value > 0)
                 {
                     double grade = g.Value;
                     grade *= 0.6;
-                    
-                    System.Console.Out.WriteLine(g.Key + " = " + grade.ToString());
 
-                    int recordBook = (int) grades["RecordBooks"][userName];
-                    JArray allTasks = (JArray) grades["Tasks"];
-                    foreach (JObject task in allTasks)
-                    {
-                        if ((string) task["name"] == g.Key)
-                        {
-                            JArray modules = (JArray) task["modules"];
-                            foreach (JObject module in modules)
-                            {
-                                int moduleid = (int) module["id"];
-                                double w = (double) module["weight"];
-                                double v = w * grade;
-                                SendGrades(grades, recordBook, moduleid, discipline, v);            
-                            }
-                        }   
-                    }
-                    
+                    System.Console.Out.WriteLine("submodule #" + g.Key.ToString() + " = " + grade.ToString());
+
+                    SendGrades(grades, nick, g.Key, semester, service, subject, grade);
                 }
             }
-            
-            
         }
 
         static void Main(string[] args)
@@ -171,6 +161,7 @@ namespace NunitReport
                 userName = "czen";
                 filePath = @"./TestResult.xml";
             }
+
             doc.Load(filePath);
             string[] XmlText = File.ReadAllLines(filePath);
 //            System.Console.WriteLine("+++++++++++++++++++++++++");
@@ -186,7 +177,6 @@ namespace NunitReport
 
             foreach (XmlNode node in nodes)
             {
-                Console.Out.WriteLine(node.Name);
                 if (node.Name == "test-suite")
                 {
                     ParseTestSuite(node);
diff --git a/grades/Grades.json b/grades/Grades.json
index 0a7d21d..15282d1 100644
--- a/grades/Grades.json
+++ b/grades/Grades.json
@@ -1,232 +1,421 @@
 {
-  "RecordBooks": {
-       "czen": 148
-  },
   "GradeService": {
       "url": "http://grade/~dev_rating/",
       "token": "39se9832fh3e78fl23ois33mhfdff34gbuj34896"
   },
   "Discipline": {
-      "ID": 3726
+      "Subject": "Разработка компиляторов",
+      "Semester": 9
   },
-  "Tasks": [  
-      { "name": "TestSimpleLexer",
-        "modules": [
-            {
-                "id": 35712,
-                "weight": 0.5
-            },
-            {
-                "id": 35713,
-                "weight": 0.5
-            },
-        ],
-        "grades": {
-        "TestId": 0,
+  "Service": "github",
+  "Projects": [  
+      { "namespace": "TestSimpleLexer",
+        "tests": {
+        "TestId": {
+            "grade": 0,
+            "subModuleNumber": 2,
+        },
+        
+        "TestOps": { 
+            "grade": 0.5,
+            "subModuleNumber": 2,
+        },
+        "TestKeywords":  { 
+            "grade": 0.5,
+            "subModuleNumber": 2,
+        },
+        "TestOpsFail": { 
+            "grade": 1,
+            "subModuleNumber": 2,
+        },
+        
+        "TestAssigns": { 
+            "grade": 2,
+            "subModuleNumber": 2,
+        },
         
-        "TestOps": 0.5,
-        "TestKeywords": 0.5,
-        "TestOpsFail": 1,
+        "TestComparisons": { 
+            "grade": 1,
+            "subModuleNumber": 2,
+        },
         
-        "TestAssigns": 2,
+        "TestComparisonsAndOps": { 
+            "grade": 1,
+            "subModuleNumber": 3,
+        },
         
-        "TestComparisons": 1,
-        "TestComparisonsAndOps": 1,
+        "TestComment": { 
+            "grade": 1,
+            "subModuleNumber": 3,
+        },
+        "TestCommentFileEnd": { 
+            "grade": 0.5,
+            "subModuleNumber": 3,
+        },
         
-        "TestComment": 1,
-        "TestCommentFileEnd": 0.5,
-        "TestCommentNextLine": 0.5,
+        "TestCommentNextLine": { 
+            "grade": 0.5,
+            "subModuleNumber": 3,
+        },
         
-        "TestMultLineComment": 0.5,
-        "TestCommentFileEnd": 0.5,
-        "TestCommentNextLine": 0.5,
-        "TestCommentNotClosed": 0.5
+        "TestMultLineComment": { 
+            "grade": 0.5,
+            "subModuleNumber": 3,
+        },
+        "TestCommentFileEnd": { 
+            "grade": 0.5,
+            "subModuleNumber": 3,
+        },
+        "TestCommentNextLine": { 
+            "grade": 0.5,
+            "subModuleNumber": 3,
+        },
+        "TestCommentNotClosed": { 
+            "grade": 0.5,
+            "subModuleNumber": 3,
+        }
       }
       },
-      { "name": "TestLexer",
-        "modules": [
-            {
-                "id": 35710,
-                "weight": 0.5
-            },
-            {
-                "id": 35711,
-                "weight": 0.5
-            },
-        ],
-         "grades": {
-           "TestIntParse": 0.2,
-           "TestIntFailDot": 0.2,
-           "TestIntFailSymbol": 0.2,
-           "TestIntFailEpty": 0.2,
-           "TestIntCollectNumber": 0.2,
-           
-           "TestIdParse": 0.1,
-           "TestIdEmpty": 0.15,
-           "TestIdCaps": 0.15,
-           "TestIdNumbers": 0.15,
-           "TestIdUnderscore" : 0.15,
-           "TestIdDot": 0.15,
-           "TestIdDollar": 0.15,
-           
-           "TestIntNotZeroParse": 0.33,
-           "TestIntNotZeroFail": 0.33,
-           "TestIntNotZeroPass": 0.34,
-           
-           "TestLetterDigitParse": 0.5,
-           "TestLetterDigitFail": 0.5,
-           
-           "TestLetterListParse": 0.5,
-           "TestLetterListFail": 0.5,
-           
-           "TestDigitListParse": 0.5,
-           "TestDigitListFail": 0.5,
-           
-           "TestLetterDigitGroupParse": 0.5,
-           "TestLetterDigitGroupFail": 0.5,
-           
-           "TestDoubleParse": 0.5,
-           "TestDoubleFail": 0.5,
-           
-           "TestQuotedStringParse": 0.5,
-           "TestQuotedStringFail": 0.5,
-           
-           "TestCommentParse": 0.5,
-           "TestCommentFail": 0.5,
-           
-           "TestIdChainParse": 0.5,
-           "TestIdChainFail": 0.5
+      { "namespace": "TestLexer",
+         "tests": {
+           "TestIntParse": { 
+                "grade": 0.2,
+                "subModuleNumber": 0,
+            },
+           "TestIntFailDot": { 
+                "grade": 0.2,
+                "subModuleNumber": 0,
+            },
+           "TestIntFailSymbol": { 
+                "grade": 0.2,
+                "subModuleNumber": 0,
+            },
+           "TestIntFailEpty": { 
+                "grade": 0.2,
+                "subModuleNumber": 0,
+            },
+           "TestIntCollectNumber": { 
+                "grade": 0.2,
+                "subModuleNumber": 0,
+            },
+           
+           "TestIdParse": { 
+                "grade": 0.1,
+                "subModuleNumber": 0,
+            },
+           "TestIdEmpty": { 
+                "grade": 0.15,
+                "subModuleNumber": 0,
+            },
+           "TestIdCaps": { 
+                "grade": 0.15,
+                "subModuleNumber": 0,
+            },
+           "TestIdNumbers": { 
+                "grade": 0.15,
+                "subModuleNumber": 0,
+            },
+           "TestIdUnderscore" : { 
+                "grade": 0.15,
+                "subModuleNumber": 0,
+            },
+           "TestIdDot": { 
+                "grade": 0.15,
+                "subModuleNumber": 0,
+            },
+           "TestIdDollar": { 
+                "grade": 0.15,
+                "subModuleNumber": 0,
+            },
+           
+           "TestIntNotZeroParse": { 
+                "grade": 0.33,
+                "subModuleNumber": 0,
+            },
+           "TestIntNotZeroFail": { 
+                "grade": 0.33,
+                "subModuleNumber": 0,
+            },
+           "TestIntNotZeroPass": { 
+                "grade": 0.34,
+                "subModuleNumber": 0,
+            },
+           
+           "TestLetterDigitParse": { 
+                "grade": 0.5,
+                "subModuleNumber": 0,
+            },
+           "TestLetterDigitFail": { 
+                "grade": 0.5,
+                "subModuleNumber": 0,
+            },
+           
+           "TestLetterListParse": { 
+                "grade": 0.5,
+                "subModuleNumber": 1,
+            },
+           "TestLetterListFail": { 
+                "grade": 0.5,
+                "subModuleNumber": 1,
+            },
+           
+           "TestDigitListParse":  { 
+                "grade": 0.5,
+                "subModuleNumber": 1,
+            },
+           "TestDigitListFail": { 
+                "grade": 0.5,
+                "subModuleNumber": 1,
+            },
+           
+           "TestLetterDigitGroupParse": { 
+                "grade": 0.5,
+                "subModuleNumber": 1,
+            },
+           "TestLetterDigitGroupFail": { 
+                "grade": 0.5,
+                "subModuleNumber": 1,
+            },
+           
+           "TestDoubleParse": { 
+                "grade": 0.5,
+                "subModuleNumber": 1,
+            },
+           "TestDoubleFail": { 
+                "grade": 0.5,
+                "subModuleNumber": 1,
+            },
+           
+           "TestQuotedStringParse": { 
+                "grade": 0.5,
+                "subModuleNumber": 1,
+            },
+           "TestQuotedStringFail": { 
+                "grade": 0.5,
+                "subModuleNumber": 1,
+            },
+           
+           "TestCommentParse": { 
+                "grade": 0.5,
+                "subModuleNumber": 1,
+            },
+           "TestCommentFail": { 
+                "grade": 0.5,
+                "subModuleNumber": 1,
+            },
+           
+           "TestIdChainParse": { 
+                "grade": 0.5,
+                "subModuleNumber": 1,
+            },
+           "TestIdChainFail": { 
+                "grade": 0.5,
+                "subModuleNumber": 1,
+            },
          }
       },
       { "name": "TestGeneratedLexer",
-        "modules": [
-            {
-                "id": 35714,
-                "weight": 0.5
+        "tests": {
+           "TestIdCount":  { 
+                "grade": 1.5,
+                "subModuleNumber": 4,
             },
-            {
-                "id": 35715,
-                "weight": 0.5
+           "TestIdInfo": { 
+                "grade": 2,
+                "subModuleNumber": 4,
             },
-        ],
-        "grades": {
-           "TestIdCount": 1.5,
-           "TestIdInfo": 2,
            
-           "TestNumbers": 1.5,
+           "TestNumbers": { 
+                "grade": 1.5,
+                "subModuleNumber": 4,
+            },
            
-           "TestString": 1,
-           "TestSingleLineCmt": 1,
+           "TestString":  { 
+                "grade": 1,
+                "subModuleNumber": 5,
+            },
+           "TestSingleLineCmt": { 
+                "grade": 1,
+                "subModuleNumber": 5,
+            },
            
-           "TestMultiLineCmt": 1,
-           "TestMultiLineCmtIds": 2
+           "TestMultiLineCmt": { 
+                "grade": 1,
+                "subModuleNumber": 5,
+            },
+           "TestMultiLineCmtIds": { 
+                "grade": 2,
+                "subModuleNumber": 5,
+            }
         }
       },
-      { "name": "TestGeneratedParser",
-        "modules": [
-            {
-                "id": 35721,
-                "weight": 0.5
-            },
-            {
-                "id": 35722,
-                "weight": 0.5
-            },
-        ],
-        "grades": {
-           "TestWhile": 2,
-           "TestRepeat": 2,
-           "TestFor": 2,
-           "TestWrite": 2,
-           "TestIf": 2,
-           "TestVar": 3,
-           "TestExr": 3
+      { "namespace": "TestGeneratedParser",
+        "tests": {
+           "TestWhile":  { 
+                "grade": 2,
+                "subModuleNumber": 6,
+            },
+           "TestRepeat":  { 
+                "grade": 2,
+                "subModuleNumber": 6,
+            },
+           "TestFor":  { 
+                "grade": 2,
+                "subModuleNumber": 6,
+            },
+           "TestWrite":  { 
+                "grade": 2,
+                "subModuleNumber": 6,
+            },
+           "TestIf":   { 
+                "grade": 2,
+                "subModuleNumber": 7,
+            },
+           "TestVar":   { 
+                "grade": 3,
+                "subModuleNumber": 7,
+            },
+           "TestExr":   { 
+                "grade": 3,
+                "subModuleNumber": 7,
+            }
         }
       },
-      { "name": "TestDescentParser",
-        "modules": [
-            {
-                "id": 35719,
-                "weight": 0.5
-            },
-            {
-                "id": 35720,
-                "weight": 0.5
-            },
-        ],
-        "grades": {
-           "TestWhile": 3,
-           "TestFor": 4,
-           "TestIf": 3,
-           "TestExpr": 4
+      { "namespace": "TestDescentParser",
+        "tests": {
+           "TestWhile": { 
+                "grade": 3,
+                "subModuleNumber": 8,
+            },
+           "TestFor": { 
+                "grade": 4,
+                "subModuleNumber": 8,
+            },
+           "TestIf": { 
+                "grade": 3,
+                "subModuleNumber": 9,
+            },
+           "TestExpr": { 
+                "grade": 4,
+                "subModuleNumber": 9,
+            }
         }
       },
       { "name": "TestASTParser",
-        "modules": [
-            {
-                "id": 35723,
-                "weight": 0.5
-            },
-            {
-                "id": 35724,
-                "weight": 0.5
-            },
-        ],
-        "grades": {
-           "TestWhile": 2,
-           "TestRepeat": 2,
-           "TestFor": 2,
-           "TestWrite": 2,
-           "TestIf": 2,
-           "TestVarDef": 3,
-           "TestBinary": 3,
+        "tests": {
+           "TestWhile":  { 
+                "grade": 2,
+                "subModuleNumber": 10,
+            },
+           "TestRepeat": { 
+                "grade": 2,
+                "subModuleNumber": 10,
+            },
+           "TestFor": { 
+                "grade": 2,
+                "subModuleNumber": 10,
+            },
+           "TestWrite": { 
+                "grade": 2,
+                "subModuleNumber": 10,
+            },
+           "TestIf": { 
+                "grade": 2,
+                "subModuleNumber": 11,
+            },
+           "TestVarDef": { 
+                "grade": 3,
+                "subModuleNumber": 11,
+            },
+           "TestBinary": { 
+                "grade": 3,
+                "subModuleNumber": 11,
+            }
         }
       },
       { "name": "TestCodeGenerator",
-        "modules": [
-            {
-                "id": 35726,
-                "weight": 0.4444
-            },
-            {
-                "id": 35727,
-                "weight": 0.5555
-            },
-        ],
-        "grades": {
-           "SmokeTest": 0,
-           "TestOutput": 0,
-           "TestIntDivMod": 8,
-           "TestIf": 3,
-           "TestWhile": 3,
-           "TestUntil": 2
+        "tests": {
+           "SmokeTest":  { 
+                "grade": 0,
+                "subModuleNumber": 12,
+            },
+           "TestOutput": { 
+                "grade": 0,
+                "subModuleNumber": 12,
+            },
+           "TestIntDivMod": { 
+                "grade": 8,
+                "subModuleNumber": 12,
+            },
+           "TestIf": { 
+                "grade": 3,
+                "subModuleNumber": 12,
+            },
+           "TestWhile": { 
+                "grade": 3,
+                "subModuleNumber": 12,
+            },
+           "TestUntil": { 
+                "grade": 2,
+                "subModuleNumber": 12,
+            },
         }
       },
       { "name": "TestVisitors",
-        "modules": [
-            {
-                "id": 35725,
-                "weight": 0.5
-            }
-        ],
-        "grades": {
-           "NoLoopTest": 0.5,
-           "ThreeLoopsTest": 0.5,
+        "tests": {
+           "NoLoopTest":  { 
+                "grade": 0.5,
+                "subModuleNumber": 14,
+            },
+           "ThreeLoopsTest": { 
+                "grade": 0.5,
+                "subModuleNumber": 14,
+            },
            
-           "OneVarTest": 0.5,
-           "ManyVarTest": 0.5,
+           "OneVarTest": { 
+                "grade": 0.5,
+                "subModuleNumber": 14,
+            },
+           "ManyVarTest": { 
+                "grade": 0.5,
+                "subModuleNumber": 14,
+            },
            
-           "AssignTest": 0.33,
-           "CycleTest": 0.33,
-           "WriteTest": 0.34,
+           "AssignTest": { 
+                "grade": 0.33,
+                "subModuleNumber": 14,
+            },
+           "CycleTest": { 
+                "grade": 0.33,
+                "subModuleNumber": 14,
+            },
+           "WriteTest": { 
+                "grade": 0.34,
+                "subModuleNumber": 14,
+            },
            
-           "OneLoopTest": 0.33,
-           "ThreeLoopsTest1": 0.33,
-           "LoopTreeTest": 0.34,
+           "OneLoopTest": { 
+                "grade": 0.33,
+                "subModuleNumber": 14,
+            },
+           "ThreeLoopsTest1": { 
+                "grade": 0.33,
+                "subModuleNumber": 14,
+            },
+           "LoopTreeTest": { 
+                "grade": 0.34,
+                "subModuleNumber": 14,
+            },
            
-           "SimpleTest": 1,
+           "SimpleTest":  { 
+                "grade": 1,
+                "subModuleNumber": 14,
+            },
            
-           "FirstTest": 3
+           "FirstTest":  { 
+                "grade": 3,
+                "subModuleNumber": 14,
+            },
         }
       }
     ]
-- 
GitLab