nebius/SWE-rebench-V2-PRs huggingface dataset:
Repository: ember-cli/ember-cli
Pull request #5856 (2016-04-27 15:37:20)

[BUGFIX beta] Allow Node v6.0.0.
Removes warning for node `6.0.0`, and also removes duplicate `WARNING: WARNING:` from message (since `this.ui.writeWarnLine` prepends `WARNING: `).

Requires #5855 to land first.

stefanpenner: :shipit:
rwjblue: Rebased to get the fix from #5855

Patch:
diff --git a/lib/cli/cli.js b/lib/cli/cli.js
index fd3e61c20..9f35f676c 100644
--- a/lib/cli/cli.js
+++ b/lib/cli/cli.js
@@ -57,7 +57,7 @@ CLI.prototype.run = function(environment) {
       }
 
       if (platform.isUntested) {
-        this.ui.writeWarnLine('WARNING: Node ' + process.version +
+        this.ui.writeWarnLine('Node ' + process.version +
                               ' has currently not been tested against Ember CLI and may result in unexpected behaviour.');
       }
     }
diff --git a/lib/utilities/platform-checker.js b/lib/utilities/platform-checker.js
index e0a3dabe1..f4bacc5bd 100644
--- a/lib/utilities/platform-checker.js
+++ b/lib/utilities/platform-checker.js
@@ -4,7 +4,7 @@ var semver = require('semver');
 var debug = require('debug')('ember-cli:platform-checker:');
 
 var LOWER_RANGE = '0.12.0';
-var UPPER_RANGE = '6.0.0';
+var UPPER_RANGE = '7.0.0';
 
 module.exports = PlatformChecker;
 function PlatformChecker(version) {
@@ -32,4 +32,3 @@ PlatformChecker.prototype.checkIsDeprecated = function() {
 PlatformChecker.prototype.checkIsUntested = function() {
   return semver.satisfies(this.version, '>=' + UPPER_RANGE);
 };
-


Test patch:
diff --git a/tests/unit/utilities/platform-checker-test.js b/tests/unit/utilities/platform-checker-test.js
index 8fb4a42f0..85247a1fe 100644
--- a/tests/unit/utilities/platform-checker-test.js
+++ b/tests/unit/utilities/platform-checker-test.js
@@ -12,7 +12,8 @@ describe('platform-checker', function() {
   });
 
   it('should return isUntested for Node v6', function() {
-    expect(new PlatformChecker('v6.0.0').isUntested).to.be.equal(true);
+    expect(new PlatformChecker('v7.0.0').isUntested).to.be.equal(true);
+    expect(new PlatformChecker('v6.0.0').isUntested).to.be.equal(false);
     expect(new PlatformChecker('v0.12.0').isUntested).to.be.equal(false);
   });
 
@@ -52,4 +53,10 @@ describe('platform-checker', function() {
     expect(new PlatformChecker('v5.1.0').isValid).to.be.equal(true);
     expect(new PlatformChecker('v5.99.0').isValid).to.be.equal(true);
   });
+
+  it('should return isValid for Node v6', function() {
+    expect(new PlatformChecker('v6.0.0').isValid).to.be.equal(true);
+    expect(new PlatformChecker('v6.1.0').isValid).to.be.equal(true);
+    expect(new PlatformChecker('v6.99.0').isValid).to.be.equal(true);
+  });
 });
Repository: ember-cli/ember-cli
Pull request #5972 (2016-06-10 16:14:21)

[BUGFIX release] ease core-object upgrade for addons which lack .project

Turbo87: 👍 

Patch:
diff --git a/lib/models/addon.js b/lib/models/addon.js
index 0f7e3def6..9790e0bbb 100644
--- a/lib/models/addon.js
+++ b/lib/models/addon.js
@@ -29,6 +29,8 @@ var walkSync   = require('walk-sync');
 var WatchedDir   = require('broccoli-source').WatchedDir;
 var UnwatchedDir = require('broccoli-source').UnwatchedDir;
 
+var chalk = require('chalk');
+
 function mergeTrees(inputTree, options) {
   options = options || {};
   options.description = options.annotation;
@@ -39,16 +41,20 @@ function mergeTrees(inputTree, options) {
   return tree;
 }
 
+function warn(message) {
+  if (this.ui) {
+    this.ui.writeDeprecateLine(message);
+  } else {
+    console.log(chalk.yellow('DEPRECATION: '  + message));
+  }
+}
+
 function deprecatedAddonFilters(addon, name, insteadUse, fn) {
   return function(tree, options) {
     var message = name + ' is deprecated, please use ' +
       insteadUse + ' directly instead  [addon: ' + addon.name + ']';
 
-    this.ui && this.ui.writeDeprecateLine(message);
-
-    if (!this.ui)  {
-      console.warn(message);
-    }
+    warn(this, message);
 
     return fn(tree, options);
   };
@@ -283,7 +289,13 @@ var Addon = CoreObject.extend({
   */
   treeGenerator: function(dir) {
     var tree;
-    if (this.project._watchmanInfo.canNestRoots || this.isDevelopingAddon()) {
+
+    if (!this.project) {
+      this._warn('Addon: `' + this.name + '` is missing addon.project, this may be the result of an addon forgetting to invoke `super` in its init.');
+    }
+    // TODO: fix law of demeter `_watchmanInfo.canNestRoots` is obviously a poor idea
+    if ((this.project && this.project._watchmanInfo.canNestRoots) ||
+        this.isDevelopingAddon()) {
       tree = new WatchedDir(dir);
     } else {
       tree = new UnwatchedDir(dir);
@@ -292,6 +304,11 @@ var Addon = CoreObject.extend({
     return tree;
   },
 
+  /* @private
+   * @method _warn
+   */
+  _warn: warn,
+
   /**
     Returns a given type of tree (if present), merged with the
     application tree. For each of the trees available using this


Test patch:
diff --git a/tests/unit/models/addon-test.js b/tests/unit/models/addon-test.js
index bbca05009..7d6bcb03a 100644
--- a/tests/unit/models/addon-test.js
+++ b/tests/unit/models/addon-test.js
@@ -31,6 +31,24 @@ describe('models/addon.js', function() {
     });
   });
 
+  describe('old core object compat', function() {
+    it('treeGenerator works without .project', function() {
+      var warning;
+      var TheAddon = Addon.extend({
+        name: 'such name',
+        root: path.resolve(fixturePath, 'simple'),
+        _warn: function(message) {
+          warning = '' + message;
+        }
+      });
+      var addon = new TheAddon();
+      expect(function() {
+        addon.treeGenerator('foo');
+      }).to.not.throw();
+      expect(warning).to.match(/Addon: `such name` is missing addon.project/);
+    });
+  });
+
   describe('treePaths and treeForMethods', function() {
     var FirstAddon, SecondAddon;
Repository: ember-cli/ember-cli
Pull request #5994 (2016-06-17 22:42:19)

No 'diff' option when binaries are involved (confirm-dialog).

stefanpenner: mind adding a unit test?
nathanhammond: Can you do some git-fu to make sure that just your change appears in this PR? Not sure what else changed that you have non-passing tests, so hoping to reduce the surface area of this test.

Patch:
diff --git a/lib/models/file-info.js b/lib/models/file-info.js
index e8b9415d9..c06fac3c6 100644
--- a/lib/models/file-info.js
+++ b/lib/models/file-info.js
@@ -40,13 +40,26 @@ FileInfo.prototype.confirmOverwrite = function(path) {
     message: chalk.red('Overwrite') + ' ' + path + '?',
     choices: [
       { key: 'y', name: 'Yes, overwrite', value: 'overwrite' },
-      { key: 'n', name: 'No, skip', value: 'skip' },
-      { key: 'd', name: 'Diff', value: 'diff' }
+      { key: 'n', name: 'No, skip', value: 'skip' }
     ]
   };
 
-  if (canEdit()) {
-    promptOptions.choices.push({ key: 'e', name: 'Edit', value: 'edit' });
+  var outputPathIsFile = false;
+  try { outputPathIsFile = fs.statSync(this.outputPath).isFile(); } catch (err) { /* ignore */ }
+
+  var canDiff = (
+    !isBinaryFile(this.inputPath) && (
+      !outputPathIsFile ||
+      !isBinaryFile(this.outputPath)
+    )
+  );
+
+  if (canDiff) {
+    promptOptions.choices.push({ key: 'd', name: 'Diff', value: 'diff' });
+
+    if (canEdit()) {
+      promptOptions.choices.push({ key: 'e', name: 'Edit', value: 'edit' });
+    }
   }
 
   return this.ui.prompt(promptOptions)
@@ -122,7 +135,7 @@ FileInfo.prototype.checkForConflict = function() {
           output: readFile(this.outputPath)
         }).then(function(result) {
           var type;
-          if (result.input === result.output.toString()) {
+          if (result.input.toString() === result.output.toString()) {
             type = 'identical';
           } else {
             type = 'confirm';


Test patch:
diff --git a/tests/unit/models/file-info-test.js b/tests/unit/models/file-info-test.js
index 251da3759..b8b3b6839 100644
--- a/tests/unit/models/file-info-test.js
+++ b/tests/unit/models/file-info-test.js
@@ -146,4 +146,22 @@ describe('Unit - FileInfo', function() {
     });
   });
 
+  it('renders a menu without diff and edit options when dealing with binary files', function() {
+    td.when(ui.prompt(td.matchers.anything())).thenReturn(Promise.resolve({ answer: 'skip' }));
+
+    var binary = path.resolve(__dirname, '../../fixtures/problem-binary.png');
+    validOptions.inputPath = binary;
+    var fileInfo = new FileInfo(validOptions);
+
+    return fileInfo.confirmOverwrite('test.png').then(function(action) {
+      td.verify(ui.prompt(td.matchers.argThat(function(options) {
+        return (
+          options.choices.length === 2 &&
+          options.choices[0].key === 'y' &&
+          options.choices[1].key === 'n'
+        );
+      })));
+    });
+  });
+
 });
Repository: ember-cli/ember-cli
Pull request #6227 (2016-09-02 19:33:52)

add tests for alphabetize-object-keys
I was extracting it out to use elsewhere, then it turns out I didn't need it after all.

End result is better factored/tested code!


Patch:
diff --git a/blueprints/addon/index.js b/blueprints/addon/index.js
index 720358e26..88e4c690c 100644
--- a/blueprints/addon/index.js
+++ b/blueprints/addon/index.js
@@ -9,6 +9,7 @@ var date        = new Date();
 
 var normalizeEntityName = require('ember-cli-normalize-entity-name');
 var stringifyAndNormalize = require('../../lib/utilities/stringify-and-normalize');
+var alphabetizeObjectKeys = require('../../lib/utilities/alphabetize-object-keys');
 
 module.exports = {
   description: 'The default blueprint for ember-cli addons.',
@@ -159,14 +160,6 @@ function alphabetizeDependencies(contents) {
   contents.devDependencies = alphabetizeObjectKeys(contents.devDependencies);
 }
 
-function alphabetizeObjectKeys(unordered) {
-  var ordered = {};
-  Object.keys(unordered).sort().forEach(function(key) {
-    ordered[key] = unordered[key];
-  });
-  return ordered;
-}
-
 function writeContentsToFile(contents, fileName) {
   var packagePath = path.join(this.path, 'files', fileName);
 
diff --git a/lib/utilities/alphabetize-object-keys.js b/lib/utilities/alphabetize-object-keys.js
new file mode 100644
index 000000000..afdf0460c
--- /dev/null
+++ b/lib/utilities/alphabetize-object-keys.js
@@ -0,0 +1,8 @@
+'use strict';
+
+module.exports = function alphabetizeObjectKeys(unordered) {
+  return Object.keys(unordered).sort().reduce(function(ordered, key) {
+    ordered[key] = unordered[key];
+    return ordered;
+  }, {});
+};


Test patch:
diff --git a/tests/unit/utilities/alphabetize-object-keys-test.js b/tests/unit/utilities/alphabetize-object-keys-test.js
new file mode 100644
index 000000000..f53013cab
--- /dev/null
+++ b/tests/unit/utilities/alphabetize-object-keys-test.js
@@ -0,0 +1,27 @@
+'use strict';
+
+var expect                = require('chai').expect;
+var alphabetizeObjectKeys = require('../../../lib/utilities/alphabetize-object-keys');
+
+describe('alphabetize-object-keys', function() {
+  var dependencies = {
+    'b-test-package': '^1.0.0',
+    'a-test-package': '^2.0.0'
+  };
+
+  it('indents 2 spaces and ends in newline', function() {
+    var newDependencies = alphabetizeObjectKeys(dependencies);
+
+    // deep equal is not ordered
+    // this just verifies the structure hasn't changed
+    expect(newDependencies).to.deep.equal({
+      'b-test-package': '^1.0.0',
+      'a-test-package': '^2.0.0'
+    });
+
+    expect(Object.keys(newDependencies)).to.deep.equal([
+      'a-test-package',
+      'b-test-package'
+    ]);
+  });
+});
Repository: ember-cli/ember-cli
Pull request #6228 (2016-09-02 19:39:07)

in-repo-addon: sort additions to ember-addon/paths
We should probably alphabetize additions to `ember-addon/paths` like we do to `dependencies` [here](https://github.com/ember-cli/ember-cli/blob/79a4b40a1e7c0c9cb356fc2bcf3f0348a0191eb3/blueprints/addon/index.js#L46). For consistency, and also deterministic is always better for git diffs.


Patch:
diff --git a/blueprints/in-repo-addon/index.js b/blueprints/in-repo-addon/index.js
index 74fe18928..d6db7e56d 100755
--- a/blueprints/in-repo-addon/index.js
+++ b/blueprints/in-repo-addon/index.js
@@ -38,6 +38,7 @@ module.exports = {
     if (isInstall) {
       if (paths.indexOf(newPath) === -1) {
         paths.push(newPath);
+        contents['ember-addon']['paths'] = paths.sort();
       }
     } else {
       var newPathIndex = paths.indexOf(newPath);


Test patch:
diff --git a/tests/unit/blueprints/in-repo-addon-test.js b/tests/unit/blueprints/in-repo-addon-test.js
index ab8d8c889..0b9751c63 100644
--- a/tests/unit/blueprints/in-repo-addon-test.js
+++ b/tests/unit/blueprints/in-repo-addon-test.js
@@ -172,6 +172,31 @@ describe('Unit: in-repo-addon blueprint', function() {
     expect(captor.value).to.equal('\
 {\n\
   "ember-addon": {}\n\
+}\n');
+  });
+
+  it('alphabetizes paths', function() {
+    td.when(readJsonSync(), { ignoreExtraArgs: true }).thenReturn({
+      'ember-addon': {
+        paths: ['lib/test-entity-name-2']
+      }
+    });
+
+    blueprint.afterInstall(options);
+
+    var captor = td.matchers.captor();
+
+    td.verify(readJsonSync(path.normalize('test-project-root/package.json')));
+    td.verify(writeFileSync(path.normalize('test-project-root/package.json'), captor.capture()));
+
+    expect(captor.value).to.equal('\
+{\n\
+  "ember-addon": {\n\
+    "paths": [\n\
+      "lib/test-entity-name",\n\
+      "lib/test-entity-name-2"\n\
+    ]\n\
+  }\n\
 }\n');
   });
 });
Repository: ember-cli/ember-cli
Pull request #6425 (2016-11-10 20:03:52)

Adding json out for 'ember asset-sizes'
This is simply `JSON.stringify` the result of `AssetPrinterSize.prototype.makeAssetSizesObject`
We could make the json object a little more helpful. Thoughts?

```sh
ember asset-sizes --json
```

Will produce something like this:
```json
{"files":[{"name":"dist/assets/dummy.css","size":114,"gzipSize":109,"showGzipped":true},{"name":"dist/assets/dummy.js","size":31531,"gzipSize":5381,"showGzipped":true},{"name":"dist/assets/tests.js","size":33828,"gzipSize":3818,"showGzipped":true},{"name":"dist/assets/vendor.css","size":0,"gzipSize":20,"showGzipped":false},{"name":"dist/assets/vendor.js","size":3738032,"gzipSize":848035,"showGzipped":true}]}
```



Patch:
diff --git a/lib/models/asset-size-printer.js b/lib/models/asset-size-printer.js
index 55a3ff0d0..75a56f7a3 100644
--- a/lib/models/asset-size-printer.js
+++ b/lib/models/asset-size-printer.js
@@ -29,6 +29,15 @@ AssetPrinterSize.prototype.print = function () {
   }.bind(this));
 };
 
+AssetPrinterSize.prototype.printJSON = function () {
+  var ui = this.ui;
+  return this.makeAssetSizesObject().then(function (files) {
+    this.validateAssetPath(files);
+
+    ui.writeLine(JSON.stringify({files: files}));
+  }.bind(this));
+};
+
 AssetPrinterSize.prototype.makeAssetSizesObject = function () {
   var fs = require('fs');
   var zlib = require('zlib');
diff --git a/lib/tasks/show-asset-sizes.js b/lib/tasks/show-asset-sizes.js
index 885bf29a1..fbfd21977 100644
--- a/lib/tasks/show-asset-sizes.js
+++ b/lib/tasks/show-asset-sizes.js
@@ -10,6 +10,10 @@ module.exports = Task.extend({
       outputPath: options.outputPath
     });
 
+    if (options.json) {
+      return sizePrinter.printJSON();
+    }
+
     return sizePrinter.print();
   }
 });


Test patch:
diff --git a/tests/unit/models/asset-size-printer-test.js b/tests/unit/models/asset-size-printer-test.js
index 1cdd93181..de5b6fba8 100644
--- a/tests/unit/models/asset-size-printer-test.js
+++ b/tests/unit/models/asset-size-printer-test.js
@@ -107,6 +107,24 @@ describe('models/asset-size-printer', function () {
       });
   });
 
+  it('can print out to JSON', function () {
+    var assetObjectKeys;
+    var sizePrinter = new AssetSizePrinter({
+      ui: new MockUi(),
+      outputPath: storedTmpDir
+    });
+
+    return sizePrinter.printJSON()
+      .then(function () {
+        var output = JSON.parse(sizePrinter.ui.output);
+
+        expect(output.files[0].name).to.include('nested-asset.css');
+        expect(output.files[1].name).to.include('nested-asset.js');
+        expect(output.files[1].size).to.equal(32);
+        expect(output.files[1].gzipSize).to.equal(52);
+      });
+  });
+
   it('creates an array of asset objects', function () {
     var assetObjectKeys;
     var sizePrinter = new AssetSizePrinter({
Repository: amp-labs/connectors
Pull request #68 (2024-02-20 22:39:58)

Update linkedIn config

codesee-maps[bot]: <details open>
<summary><b>👇 <a href="https://app.codesee.io/r/reviews?pr=68&src=https%3A%2F%2Fgithub.com%2Famp-labs%2Fconnectors">Click on the image</a> for a new way to code review</b>
</summary>

####

[![Review these changes using an interactive CodeSee Map](https://s3.us-east-2.amazonaws.com/maps.codesee.io/images/github/amp-labs/connectors/68/4cc18ac0/c7fe7f32850286dea90f505d7faf0685b26b53c4.svg)](https://app.codesee.io/r/reviews?pr=68&src=https%3A%2F%2Fgithub.com%2Famp-labs%2Fconnectors)

#### Legend
<img src="https://app.codesee.io/Legend_v3.png" alt="CodeSee Map legend" width="220" height="156">
</details>

Patch:
diff --git a/providers/providers.yaml b/providers/providers.yaml
index c62666c7..16fdc14a 100644
--- a/providers/providers.yaml
+++ b/providers/providers.yaml
@@ -43,6 +43,9 @@ providers:
   linkedIn:
     baseUrl: "https://api.linkedin.com"
     authType: oauth2
+    oauthOpts:
+      authUrl: "https://www.linkedin.com/oauth/v2/authorization"
+      tokenUrl: "https://www.linkedin.com/oauth/v2/accessToken"
     support:
       bulkWrite: false
       proxy: false


Test patch:
diff --git a/providers/catalog_test.go b/providers/catalog_test.go
index 54cf4de4..495a110a 100644
--- a/providers/catalog_test.go
+++ b/providers/catalog_test.go
@@ -81,9 +81,12 @@ func TestReadConfig(t *testing.T) { //nolint:funlen
 					Subscribe: false,
 					Proxy:     false,
 				},
-				AuthType:  AuthTypeOAuth2,
-				OauthOpts: OauthOpts{},
-				BaseURL:   "https://api.linkedin.com",
+				AuthType: AuthTypeOAuth2,
+				OauthOpts: OauthOpts{
+					AuthURL:  "https://www.linkedin.com/oauth/v2/authorization",
+					TokenURL: "https://www.linkedin.com/oauth/v2/accessToken",
+				},
+				BaseURL: "https://api.linkedin.com",
 			},
 			expectedErr: nil,
 		},
Repository: amp-labs/connectors
Pull request #93 (2024-03-15 06:09:57)

[ENG-792] feat: Add Close CRM connector (fix)
Fixed the failed test issue, CloseCRM is no longer mentioned in the list of the failed ones:


--- FAIL: TestReadInfo (0.00s)
    --- FAIL: TestReadInfo/notion (0.00s)
        c:\Users\nadia\Desktop\projects\connectors\providers\catalog_test.go:284: [Valid Notion provider config with no substitutions] Expected support: {false false false false false}, but got: {false true false false false}
FAIL
coverage: 68.8% of statements
FAIL	github.com/amp-labs/connectors/providers	0.278s
FAIL


Listener430: @RajatPawar hi, subitting a fix as requested. 

Patch:
diff --git a/providers/catalog.go b/providers/catalog.go
index d67fe62c..b839a72d 100644
--- a/providers/catalog.go
+++ b/providers/catalog.go
@@ -128,8 +128,8 @@ var catalog = CatalogType{ // nolint:gochecknoglobals
 		OauthOpts: OauthOpts{
 
 			AuthURL:                   "https://app.close.com/oauth2/authorize",
-			TokenURL:                  "https://api.close.com/oauth2/token/",
-			ExplicitScopesRequired:    true,
+			TokenURL:                  "https://api.close.com/oauth2/token",
+			ExplicitScopesRequired:    false,
 			ExplicitWorkspaceRequired: false,
 		},
 		Support: Support{


Test patch:
diff --git a/providers/catalog_test.go b/providers/catalog_test.go
index e1c382df..3856ebc1 100644
--- a/providers/catalog_test.go
+++ b/providers/catalog_test.go
@@ -165,7 +165,7 @@ var testCases = []struct { // nolint
 			AuthType: Oauth2,
 			OauthOpts: OauthOpts{
 				AuthURL:                   "https://app.close.com/oauth2/authorize",
-				TokenURL:                  "https://api.close.com/oauth2/token/",
+				TokenURL:                  "https://api.close.com/oauth2/token",
 				ExplicitScopesRequired:    false,
 				ExplicitWorkspaceRequired: false,
 			},
@@ -236,7 +236,11 @@ var testCases = []struct { // nolint
 				Subscribe: false,
 				Write:     false,
 			},
-			BaseURL:  "https://api.dropboxapi.com/2/",
+			BaseURL: "https://api.dropboxapi.com/2/",
+		},
+		expectedErr: nil,
+	},
+	{
 		provider:    Notion,
 		description: "Valid Notion provider config with no substitutions",
 		expected: &ProviderInfo{
Repository: amp-labs/connectors
Pull request #99 (2024-03-16 05:50:49)

[ENG-799] feat: Add Sellsy connector 
## Checklist
- Ran Linter
+ Catalog tests passing
+ Created PR from non-main branch 

## Catalog variables
No additional variables

## Notes

## Testing 
### GET 
URL: <localhost:4444/v2/companies> 
![Get proxy ok](https://github.com/amp-labs/connectors/assets/95291462/ad83855a-9e21-4d4e-9e4b-0c54810fedd3)


### POST
URL: <http://localhost:4444/v2/companies/52655458/addresses> 
![Post proxy ok](https://github.com/amp-labs/connectors/assets/95291462/15068fd1-f98c-4cf8-8520-0a1e77ede298)


## Pagination
![pagination example](https://github.com/amp-labs/connectors/assets/95291462/5de05371-45ab-4e52-a253-9672c528904e)


Listener430: @RajatPawar hi, could you please kindly take a look when you have a minute? 

Patch:
diff --git a/providers/catalog.go b/providers/catalog.go
index 6060c456..3d1b4c7c 100644
--- a/providers/catalog.go
+++ b/providers/catalog.go
@@ -10,6 +10,7 @@ const (
 	LinkedIn   Provider = "linkedIn"
 	Salesloft  Provider = "salesloft"
 	Outreach   Provider = "outreach"
+	Sellsy     Provider = "sellsy"
 	Attio      Provider = "attio"
 	Close      Provider = "close"
 	Keap       Provider = "keap"
@@ -123,6 +124,25 @@ var catalog = CatalogType{ // nolint:gochecknoglobals
 		},
 	},
 
+	// Sellsy configuration
+	Sellsy: {
+		AuthType: Oauth2,
+		BaseURL:  "https://api.sellsy.com",
+		OauthOpts: OauthOpts{
+			AuthURL:                   "https://login.sellsy.com/oauth2/authorization",
+			TokenURL:                  "https://login.sellsy.com/oauth2/access-tokens",
+			ExplicitScopesRequired:    false,
+			ExplicitWorkspaceRequired: false,
+		},
+		Support: Support{
+			BulkWrite: false,
+			Proxy:     false,
+			Read:      false,
+			Subscribe: false,
+			Write:     false,
+		},
+	},
+
 	// Attio configuration
 	Attio: {
 		AuthType: Oauth2,


Test patch:
diff --git a/providers/catalog_test.go b/providers/catalog_test.go
index 159396af..1cd17bcd 100644
--- a/providers/catalog_test.go
+++ b/providers/catalog_test.go
@@ -150,6 +150,28 @@ var testCases = []struct { // nolint
 		expectedErr: nil,
 	},
 
+	{
+		provider: Sellsy,
+		expected: &ProviderInfo{
+			AuthType: Oauth2,
+			OauthOpts: OauthOpts{
+				AuthURL:                   "https://login.sellsy.com/oauth2/authorization",
+				TokenURL:                  "https://login.sellsy.com/oauth2/access-tokens",
+				ExplicitScopesRequired:    false,
+				ExplicitWorkspaceRequired: false,
+			},
+			Support: Support{
+				BulkWrite: false,
+				Proxy:     false,
+				Read:      false,
+				Subscribe: false,
+				Write:     false,
+			},
+			BaseURL: "https://api.sellsy.com",
+		},
+		expectedErr: nil,
+	},
+
 	{
 		provider:    Attio,
 		description: "Valid Attio provider config with non-existent substitutions",