DEV: Plugin API to allow creation of directory columns with item query (#13402)

The first thing we needed here was an enum rather than a boolean to determine how a directory_column was created. Now we have `automatic`, `user_field` and `plugin` directory columns.

This plugin API is assuming that the plugin has added a migration to a column to the `directory_items` table.

This was created to be initially used by discourse-solved. PR with API usage - https://github.com/discourse/discourse-solved/pull/137/
This commit is contained in:
Mark VanLandingham
2021-06-17 09:06:18 -05:00
committed by GitHub
parent ea2833d0d8
commit 0c42a29dc4
25 changed files with 222 additions and 96 deletions

View File

@@ -600,4 +600,28 @@ describe Plugin::Instance do
expect(ApiKeyScope.scope_mappings.dig(:groups, :create, :actions)).to contain_exactly(*actions)
end
end
describe '#add_directory_column' do
let!(:plugin) { Plugin::Instance.new }
it 'creates a directory column record' do
plugin.add_directory_column('random_c', query: "SELECT COUNT(*) FROM users", icon: 'recycle')
expect(DirectoryColumn.find_by(name: 'random_c', icon: 'recycle', enabled: false).present?).to be(true)
end
it 'errors when the column_name contains invalid characters' do
expect {
plugin.add_directory_column('Capital', query: "SELECT COUNT(*) FROM users", icon: 'recycle')
}.to raise_error(RuntimeError)
expect {
plugin.add_directory_column('has space', query: "SELECT COUNT(*) FROM users", icon: 'recycle')
}.to raise_error(RuntimeError)
expect {
plugin.add_directory_column('has_number_1', query: "SELECT COUNT(*) FROM users", icon: 'recycle')
}.to raise_error(RuntimeError)
end
end
end