olehborysevych commented on code in PR #22792:
URL: https://github.com/apache/beam/pull/22792#discussion_r950122219


##########
playground/backend/cmd/server/controller_test.go:
##########
@@ -813,7 +815,7 @@ func TestPlaygroundController_SaveSnippet(t *testing.T) {
                                },
                        },
                        wantErr: false,
-                       wantId:  "xHce_LOg7Zm",
+                       wantId:  "l7OFah5mLHU",

Review Comment:
   @vchunikhin what changed here so that id is changed? 



##########
playground/backend/internal/utils/file_utils.go:
##########
@@ -35,53 +37,105 @@ const (
        goExt                 = ".go"
        pythonExt             = ".py"
        scioExt               = ".scala"
+
+       mismatchExtAndSDKErrMsg = "file extension doesn't match to the 
specified SDK"
 )
 
 // GetFileName returns the valid file name.
-func GetFileName(name string, sdk pb.Sdk) string {
+func GetFileName(name, content string, sdk pb.Sdk) (string, error) {
        if name == "" {
                logger.Warn("The name of the file is empty. Will be used 
default value")
                switch sdk {
                case pb.Sdk_SDK_JAVA:
-                       return defaultJavaFileName
+                       return defaultJavaFileName, nil
                case pb.Sdk_SDK_GO:
-                       return defaultGoFileName
+                       return defaultGoFileName, nil
                case pb.Sdk_SDK_PYTHON:
-                       return defaultPythonFileName
+                       return defaultPythonFileName, nil
                case pb.Sdk_SDK_SCIO:
-                       return defaultScioFileName
+                       return defaultScioFileName, nil
                }
        }
-       return getCorrectFileName(name, sdk)
+       return getCorrectFileName(name, content, sdk)
 }
 
 // getCorrectFileName returns the correct file name.
-func getCorrectFileName(name string, sdk pb.Sdk) string {
-       ext := filepath.Ext(name)
+func getCorrectFileName(name, content string, sdk pb.Sdk) (string, error) {
+       ext := getExtOrExtBasedOnContent(filepath.Ext(name), content)
+       if !isValidFileExtensionAndSDK(ext, sdk) {
+               return "", errors.New(mismatchExtAndSDKErrMsg)
+       }
        switch sdk {
        case pb.Sdk_SDK_JAVA:
-               return getCorrectNameOrDefault(ext, javaExt, 
defaultJavaFileName, name)
+               return getCorrectNameOrDefault(ext, javaExt, 
defaultJavaFileName, name), nil
        case pb.Sdk_SDK_GO:
-               return getCorrectNameOrDefault(ext, goExt, defaultGoFileName, 
name)
+               return getCorrectNameOrDefault(ext, goExt, defaultGoFileName, 
name), nil
        case pb.Sdk_SDK_PYTHON:
-               return getCorrectNameOrDefault(ext, pythonExt, 
defaultPythonFileName, name)
+               return getCorrectNameOrDefault(ext, pythonExt, 
defaultPythonFileName, name), nil
        case pb.Sdk_SDK_SCIO:
-               return getCorrectNameOrDefault(ext, scioExt, 
defaultScioFileName, name)
+               return getCorrectNameOrDefault(ext, scioExt, 
defaultScioFileName, name), nil
+       default:
+               return name, nil
+       }
+}
+
+// isValidFileExtensionAndSDK returns a flag indicating the result of 
validation
+func isValidFileExtensionAndSDK(ext string, sdk pb.Sdk) bool {
+       switch ext {
+       case javaExt:
+               return sdk == pb.Sdk_SDK_JAVA
+       case goExt:
+               return sdk == pb.Sdk_SDK_GO
+       case pythonExt:
+               return sdk == pb.Sdk_SDK_PYTHON
+       case scioExt:
+               return sdk == pb.Sdk_SDK_SCIO
        default:
-               return name
+               return true
        }
 }
 
+// getExtBasedOnContent return a file extension
+func getExtOrExtBasedOnContent(ext, content string) string {
+       if ext == "" {
+               return getExtBasedOnContent(content)
+       }
+       return ext
+}
+
+// getExtBasedOnContent return a file extension based on the content
+func getExtBasedOnContent(content string) string {
+       if strings.Contains(content, javaMainMethod) {
+               return javaExt
+       }
+       if strings.Contains(content, goMainMethod) {
+               return goExt
+       }
+       if strings.Contains(content, pythonMainMethod) {
+               return pythonExt
+       }
+       if strings.Contains(content, goMainMethod) {

Review Comment:
   goMainMethod looks incorrect here



##########
playground/backend/internal/utils/file_utils.go:
##########
@@ -35,53 +37,105 @@ const (
        goExt                 = ".go"
        pythonExt             = ".py"
        scioExt               = ".scala"
+
+       mismatchExtAndSDKErrMsg = "file extension doesn't match to the 
specified SDK"
 )
 
 // GetFileName returns the valid file name.
-func GetFileName(name string, sdk pb.Sdk) string {
+func GetFileName(name, content string, sdk pb.Sdk) (string, error) {
        if name == "" {
                logger.Warn("The name of the file is empty. Will be used 
default value")
                switch sdk {
                case pb.Sdk_SDK_JAVA:
-                       return defaultJavaFileName
+                       return defaultJavaFileName, nil
                case pb.Sdk_SDK_GO:
-                       return defaultGoFileName
+                       return defaultGoFileName, nil
                case pb.Sdk_SDK_PYTHON:
-                       return defaultPythonFileName
+                       return defaultPythonFileName, nil
                case pb.Sdk_SDK_SCIO:
-                       return defaultScioFileName
+                       return defaultScioFileName, nil
                }
        }
-       return getCorrectFileName(name, sdk)
+       return getCorrectFileName(name, content, sdk)
 }
 
 // getCorrectFileName returns the correct file name.
-func getCorrectFileName(name string, sdk pb.Sdk) string {
-       ext := filepath.Ext(name)
+func getCorrectFileName(name, content string, sdk pb.Sdk) (string, error) {
+       ext := getExtOrExtBasedOnContent(filepath.Ext(name), content)
+       if !isValidFileExtensionAndSDK(ext, sdk) {
+               return "", errors.New(mismatchExtAndSDKErrMsg)
+       }
        switch sdk {
        case pb.Sdk_SDK_JAVA:
-               return getCorrectNameOrDefault(ext, javaExt, 
defaultJavaFileName, name)
+               return getCorrectNameOrDefault(ext, javaExt, 
defaultJavaFileName, name), nil
        case pb.Sdk_SDK_GO:
-               return getCorrectNameOrDefault(ext, goExt, defaultGoFileName, 
name)
+               return getCorrectNameOrDefault(ext, goExt, defaultGoFileName, 
name), nil
        case pb.Sdk_SDK_PYTHON:
-               return getCorrectNameOrDefault(ext, pythonExt, 
defaultPythonFileName, name)
+               return getCorrectNameOrDefault(ext, pythonExt, 
defaultPythonFileName, name), nil
        case pb.Sdk_SDK_SCIO:
-               return getCorrectNameOrDefault(ext, scioExt, 
defaultScioFileName, name)
+               return getCorrectNameOrDefault(ext, scioExt, 
defaultScioFileName, name), nil
+       default:
+               return name, nil
+       }
+}
+
+// isValidFileExtensionAndSDK returns a flag indicating the result of 
validation
+func isValidFileExtensionAndSDK(ext string, sdk pb.Sdk) bool {
+       switch ext {
+       case javaExt:
+               return sdk == pb.Sdk_SDK_JAVA
+       case goExt:
+               return sdk == pb.Sdk_SDK_GO
+       case pythonExt:
+               return sdk == pb.Sdk_SDK_PYTHON
+       case scioExt:
+               return sdk == pb.Sdk_SDK_SCIO
        default:
-               return name
+               return true

Review Comment:
   Why do we have "true" here?



##########
playground/backend/internal/db/mapper/datastore_mapper_test.go:
##########
@@ -122,7 +123,7 @@ func TestEntityMapper_ToFileEntity(t *testing.T) {
 
        for _, tt := range tests {
                t.Run(tt.name, func(t *testing.T) {
-                       result := testable.ToFileEntity(tt.args.info, 
tt.args.file)
+                       result, _ := testable.ToFileEntity(tt.args.info, 
tt.args.file)

Review Comment:
   Could you please add tests for cases where ToFileEntity returns an error?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to